문제

내가 만들려고 하는 캐릭터 생성 마법사를 위한 게임입니다.에서 하나의 클래스의 속성을 계산합니다.다른 클래스,나는 사용자에게 표시되는 특산물을 기반으로 사용할 수 있는 캐릭터의 속성.그러나,기억이 없습 방법을 통과하는 변수들 사이에 다른 클래스입니다.

여기에는 예의가:

class BasicInfoPage(wx.wizard.WizardPageSimple):            
    def __init__(self, parent, title):
         wiz.WizardPageSimple.__init__(self, parent)
         self.next = self.prev = None
         self.sizer = makePageTitle(self, title)

                    <---snip--->

         self.intelligence = self.genAttribs()

class MOS(wx.wizard.WizardPageSimple):
     def __init__(self, parent, title):
         wiz.WizardPageSimple.__init__(self, parent)
         self.next = self.prev = None
         self.sizer = makePageTitle(self, title)
      def eligibleMOS(self, event):
          if self.intelligence >= 12: 
               self.MOS_list.append("Analyst")

문제는 내가 알아낼 수 없습니다 사용하는 방법"정보"에서 변수 BasicInfoPage 클래스를 모스 클래스입니다.저는 다른 것들에서는 인터넷의 주위에 아무것도하지만 작동하는 것 같다.나는 무엇이 없는가?

편집 내가 깨달은 후 나는이 게시하지 않았던 그것을 설명하는습니다.나를 만들려고 컴퓨터 버전의 황혼 2000RPG 에서 1980 년대.

내가 사용하여 wxPython 을 만드는 마법사부모의 클래스가 마법사에서 wxPython.는 마법사를 걸어 사용자의 생성을 통해 문자,그래서 기본 정보 페이지(클래스 BasicInfoPage)사용자에게 문자의 이름과"롤"문자의 특성이 있습니다.는"자체입니다.정보"에서 온다.

내가 사용하고 생성된 특성에 대한 그녀의 페이지에 추가 마법사에서는 사용자가 선택하는 이 전문의 문자입니다.은 요리하는가에 따라 사용 가능 특성에 대한 문자는,예를 들어,는 경우에는 정보를 충분히 높은 캐릭터 수 있는 인텔 Anaylst.

그것은 몇 년 동안 이후 나는 프로그래밍,특히 OOP 아이디어.그 이유는 내가 혼동을 만드는 방법에 대한 본질적으로 어떤 변수와 함께 클래스와 방법을 마련하고 있습니다.

도움이 되었습니까?

해결책

당신이 있습니다"등"및"인스턴스"를 혼동된다.그것은 명확하지 않다 당신의 예제에서,그래서 나는 것 같은 생각을 많이 이용하여 클래스 정의하지 않는 적절한 개체에 해당 클래스의 인스턴스.

클래스지 않는 정말 사용 가능한 속성 값이 있습니다.클래스는 단지 일반적인 정의 집합의 컬렉션에 대한 개체입니다.당신을 생각해야의 클래스의 정의,실제적인 것들입니다.

클래스의 인스턴스,""개체가 실제적인 일들이 있는 실제 특성 값과 실행 방법은 기능입니다.

당신이 통과하지 못한 변수를 중 클래스.당신이 통과 변수는 중 인스턴스.실질적인 문제로만 들 변수는 문제입니다.[네,있는 클래스 변수이지만,그들은 매우 전문적이고 종종 복잡한 것,최고의 피할 수 있습니다.]

를 만들 때는 객체(클래스의 인스턴스)

b= BasicInfoPage(...)

다음 b.intelligence 의 가치에 대한 정보 b 의 인스턴스 BasicInfoPage.

정말 일반적인 것입니다

class MOS( wx.wizard.PageSimple ):
    def __init__( self, parent, title, basicInfoPage ):
        <snip>
        self.basicInfo= basicInfoPage

지금 이내에,MOS 방법은,당신이 말할 수 있는 self.basicInfo.intelligence 기 때문에 MOS 있는 객체의 BasicInfoPage 사용할 수 있습니다.

를 작성할 때 모스,당신이 그것을 제공으로 인스턴스의 BasicInfoPage 는데 사용합니다.

someBasicInfoPage= BasicInfoPage( ... ) 
m= MOS( ..., someBasicInfoPage )

지금,체 m 할 수 있는 검사 someBasicInfoPage.intelligence

다른 팁

마법사의 각 페이지--자체--지 않는 실제로는 컨테이너에 대한 정보를 수집.

에 읽 모델 View-컨트롤 디자인 패턴입니다.귀하의 페이지 보기와 제어 부품의 디자인이다.지 않는 데이터 모델,그러나입니다.

당신은 더 행복할 것이 있는 경우 별도의 개체는"빌"에 의하여 페이지입니다.각 페이지의 일부를 설정의 특성에는 기본 모델을 개체입니다.그런 다음 페이지를 서로 독립적이므로,모든 페이지를 얻고 설정 값이 기본 모델을 개체입니다.

때문에 당신은 문자,당신은 어떤 클래스는 다음과 같이

class Character( object ):
    def __init__( self ):
        self.intelligence= 10
        <default values for all attributes.>

다음의 다양한 마법사를 인스턴스를 할 필요가 주어진 기본 문자체로 장소를 넣고 값입니다.

나의 문제는 사실의 혼란스 클래스 대인스턴스가 있습니다.나는 모든 것을 하는 것을 통해 수업을 만들지 않고 실제 인스턴스입니다.Plus,I was 강제"BasicInfoPage"등을 할 너무 많은 작품입니다.

궁극적으로 만들고,새로운 클래스(BaseAttribs 는)모든 변수가 필요합니다.내가 다음에서 만들어의 인스턴스는 등 실행할 때 마법사를 통과하는 인스턴스를 인수로 클래스에는 다음과 같습니다:

#---Run the wizard
if __name__ == "__main__":
    app = wx.PySimpleApp()
    wizard = wiz.Wizard(None, -1, "TW2K Character Creation")
    attribs = BaseAttribs

#---Create each page
    page1 = IntroPage(wizard, "Introduction")
    page2 = BasicInfoPage(wizard, "Basic Info", attribs)
    page3 = Ethnicity(wizard, "Ethnicity")
    page4 = MOS(wizard, "Military Occupational Specialty", attribs)

그 다음 사용 정보를 S. 로트 제공하고 만들어진 각각의 인스턴스(는 경우에는 그것이 무엇이라고)내에서 각 클래스각 클래스에 액세스하는 동일한 변수이지만.

모든 것을 작품으로,지금까지 알 수 있습니다.감사합니다.

모두 필요합니다.그것은 정말 간단한 문제는 내가 줄 수 있는 몇 가지 중 하나인 솔루션을(아닌 다른 간단한 추한 글로벌은 휴식이 뭔가 다른 사람),그러나 하나의 프로그램 구조입니다.당신이하지 않는 마술에 접근하는 변수에서 만들어진 또 다른 인스턴스의 또 다른 클래스입니다.당신은 하나에게 정보를 참조하 MOS,또는에서 BasicInfoPage,그러나 그 발생할 수 있습니다.그것은 나에게 보인다는 클래스 설계되었는 오히려 이상한--정보 페이지에 대한 한 가지를 생성하지 않아야 합 아무것도 않는 경우,그것은 그것을 주로 다시 알아야--어떤 종류의 중심 장소가 있어야 된 하나는 생성에서 첫 번째 장소입니다.일반적으로,당신은 설정할 변수이고,그들을 얻습니다.거나 적어도,난 것입니다.

당신이 원하는 경우 기본적인 대답이"나는 어떻게 전달 변수들 사이에 다른 클래스",여기에 당신이 갈지만,나는 그것을 의심의 당신이 원하는 것을 정확히,당신이 볼 수을 사용하여 어떤 종류의 통제 프레임워크:

class Foo(object):
    def __init__(self, var):
        self.var = var

class Bar(object):
    def do_something(self, var):
        print var*3

if __name__ == '__main__':
    f = Foo(3)
    b = Bar()
    # look, I'm using the variable from one instance in another!
    b.do_something(f.var)

면 나는 당신을 올바르게 그 대답은:당신은 할 수 없습니다.

정보해야의 특성 WizardPageSimple 는 경우에,당신은 모두를 원하는 클래스를 상속받습니다.

귀하의 상황에 따라할 수 있을 추출하려고하는 정보와 관련된 특성으로 또 다른 공공 무.그런 다음을 수 있는 상속에서 두:

class MOS(wiz.WizardPageSimple, wiz.IntelligenceAttributes): # Or something like that.

는 경우에 당신 를 사용하여 협력합니다.사실에서 사용해야 합니다.을 호출하는 대신

wiz.WizardPageSimple.__init__(self, parent)

전화

super(MOS, self).__init__(self, parent)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top