특정 기본 클래스에서 파생 된 모든 클래스는 "path"라는 속성을 정의해야합니다. 오리 타이핑의 의미에서 나는 서브 클래스에서 정의에 의존 수 :매개 변수를 기본 클래스 생성자에 전달하거나 인스턴스 변수를 사용합니까?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
또 다른 possiblity가 기본 클래스 생성자를 사용하는 것입니다 :
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
내가 파이썬 3.1 사용합니다.
무엇을 원하십니까? 이유가 무엇입니까? 더 좋은 방법이 있습니까? 파이썬 3.0 이상에서
'super()'에 대해 아무 것도 상처가 없습니다. 취약성은 3.x (OP가 사용하고있는'super()'호출과 같이 고정되어있는 2.x 문법과 일반적으로 다중 상속이다. 파이썬 3.x에서 baseclass 메소드를 직접 호출하는 이유가 없기 때문에 'super() .__ init (...)'구문은 더 나쁘지 않고 종종 우수합니다. –
'super'를 사용하여 판단하면 deamon이 py3k를 사용하고 있다고 생각합니다 – SilentGhost
@Thomas Wouters : 다른 생성자 서명을 가진 다중 상속과 기본 클래스가 있다면 super를 어떻게 사용 하시겠습니까? 파생 클래스의 모든 인수를 모든 기본 클래스에 전달하는 것은 더러운 해킹처럼 보이며 명명 된 매개 변수에 의존하고 기본 클래스가 필요로하는 것을 정리하도록합니다. – kriss