2014-12-31 5 views
0

저는 파이썬 3을 사용합니다. kwargs에는 약간의 문제가 있습니다. 인스턴스 인수를 기본 인수 값으로 사용할 수 있습니까? 나는이 같은 의미 :기본 인수로 사용되는 인스턴스 속성

class foo: 
    def __init__(self, a,b): 
     self.a = a 
     self.b = b 

    def setNewA(self, a=self.a): 
     print(a) 

을하지만 오류가있어 :

NameError: name 'self' is not defined 

내가 클래스 이름을 사용하는 경우 나있어 :

AttributeError: type object 'foo' has no attribute 'a' 

나는 다른 것을 알고를 방법은 다음과 같은 것을 사용하는 것입니다 :

def setNewA(self, a=None): 
     a = a or self.a 
     print(a) 

그러나 m aybe 그것을 할 수있는 방법이 있습니까?

+0

두 메소드 정의 모두에서 'self' 매개 변수가 누락되었습니다. 아니요, 인스턴스 속성을 기본 인수로 사용할 수 없습니다. 메서드가 만들어 질 때 존재하지 않습니다. – jonrsharpe

+0

메소드는 객체에 대한 참조가 저장되는 첫 번째 인수로 'self'를 놓친다. [여기] (https://docs.python.org/3/tutorial/classes.html#method-objects)를 참조하십시오. – zegkljan

+0

네 말이 맞아, 내 게시물에 오타가 생겼어. – voldi

답변

0

유스 케이스에 맞는지 확실하지는 않지만 어때요?

>>> class foo: 
... b = 1 
... 
... def setNewA(self, a=b): 
...  print(a) 
>>> 
>>> f = foo() 
>>> f.setNewA() 
1 
>>> f.setNewA(2) 
2