2012-02-15 5 views
4

은 내가 파이썬에서 "클래스"와 "상속 '의 사용의 몇 가지 오해가 생각 나는 다음과 같은 내 질문에 간단합니다 :.파이썬 : 변수, 상속 및 기본 인수

class A: 
    def __init__(self): 
     self.data = 100 

class B(A): 
    def b(self): 
     print self.data 

>>>B().b() 
>>>100 

OK .

class C(A): 
    def c(self, num=self.data): 
     print self.data 

>>>C().c() 
NameError: name 'self' is not defined 

내가이 self.data에 'NUM'의 기본 값을 설정하려면 : 나는 다른 클래스를 만드는 경우, 지금까지 너무 좋아는하지만, 뭔가 다음으로 표시되는, 잘못 '100'. '수업'이 없으면 훨씬 간단 해집니다.

data = 100 
def d(num = data): 
    print num 

>>>d() 
>>>100 

나는 이미 몇 가지 기사를 봤지만 여전히이 문제에 갇혀 있습니다 ... 미리 감사드립니다!

답변

9

당신이 할 때 : 당신이 좋아하는 일을하고있는

class C(A): 
    def c(self, num=self.data): 
     print self.data 

:

>>> def d(num, data=num): 
...  print(num, data) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'num' is not defined 

그리고 당신이 본대로 파이썬 컴파일러는 두 번째 num이 무엇인지 알 수 없습니다.

그러나 같은 일을에서 당신을 중지 아무것도 없다 :

class C(A): 
    def c(self, num=None): 
     print num or self.data 

또는 명시 적 None 검사와

:

class C(A): 
    def c(self, num=None): 
     if num is None: 
      num = self.data 
     print num 
+0

위대한! 정말 감사! 이것은 내가 원하는 것입니다! 고맙습니다! – amigcamel

0

당신은 클래스 메소드를 오해하는가. 클래스 메소드는 암시 적으로 전달됩니다. 자체는 존재하지 않습니다. def c(self, num=HERE>>>>>self<<<<<HERE.data):

왜 당신이하고있는 일을하고 싶습니까?

2

함수 매개 변수 기본값은 함수가 정의 될 때 평가되며 호출 될 때 평가되지 않습니다. 정의 시간에는 이름이 self입니다.

가장 좋은 코스는 그게 무슨 뜻인지 해석하는 기능의 논리를 사용 후 기본값으로 없음을 사용하지,하는 것입니다 :

class C(A): 
    def c(self, num=None): 
     if num is None: 
      num = self.data 
     #.. the rest of the function .. 
3

이 상속과는 아무 상관이 없습니다. 당신은 기본 클래스 A에서 동일한 작업을 수행하려고 할 수 있으며 같은 방법으로 실패합니다. 당신은 단순히 원하는 것을 달성하기 위해

은 수행 클래스의 방법은 인수를 얻을

def c(self, num=None): 
    if num is None: 
     num = self.data 
+0

네, 맞습니다! 고마워요! – amigcamel

0
class C(A): 
    def c(self,data=None): 
     if data == None: 
      print self.data 
     else 
      print data 

, 당신은 self.something를 전달할 수 없습니다.

0

이미 언급했듯이 'self'변수를 사용할 수 없습니다. 나중에 데이터 값을 변경할 필요가없는 경우 다음을 수행 할 수 있습니다.