새로운 버전의 자체를 반환하는 수퍼 클래스에 함수가 있습니다. 특정 함수를 상속하는이 수퍼 클래스의 하위 클래스가 있지만 하위 클래스의 새 버전을 반환합니다. 함수 호출이 부모로부터 왔을 때 부모의 버전을 반환하도록 코드를 작성하려면 어떻게해야합니까? 그러나 자식으로부터 호출 될 때 새로운 버전의 자식을 반환합니까? new
만약Python 상속 : 서브 클래스를 반환하십시오.
답변
사용, self
에 classmethod 의존하지 않습니다
class Parent(object):
@classmethod
def new(cls,*args,**kwargs):
return cls(*args,**kwargs)
class Child(Parent): pass
p=Parent()
p2=p.new()
assert isinstance(p2,Parent)
c=Child()
c2=c.new()
assert isinstance(c2,Child)
을 또는 new
경우, self
에 따라 self
의 클래스를 결정하는 type(self)
를 사용합니까 : 왜 당신을
class Parent(object):
def new(self,*args,**kwargs):
# use `self` in some way to perhaps change `args` and/or `kwargs`
return type(self)(*args,**kwargs)
두 번째 경우에도 첫 번째 방법을 사용해야하는 상황은 무엇입니까? 독자들에게'new'가'self' 나'args' /'kwargs'를 돌연변이시키지 않는다는 것을 분명히하기 위해서입니까? – nivk
@nivk : classmethod의 주요 용도 중 하나는 [대체 생성자]를 정의하는 것입니다 (https://stackoverflow.com/a/1950927/190597). 이것이 이해 된 협약이기 때문에, 당신을 위해 당신의 코드를 읽는 다른 사람들에게도이 대회를 따르는 것이 도움이됩니다. – unutbu
이 경우 유연함으로 인해 두 번째 방법을 선호해야합니다. OP에서 링크에 표시된 의미에서 대체 생성자가 필요하다고 생각하지 않습니다. (여기에서 나를 데려온 사용 사례도 마찬가지입니다.) 첫 번째 방법을 선호해야 할 부분이 있습니까? – nivk
- 1. Python __subclasses __() 서브 클래스를 나열하지 않음
- 2. 노드 클래스를 반환하십시오
- 3. Django 모델 상속 : 기존 수퍼 클래스를 사용하여 서브 클래스 만들기
- 4. Fluenthibernate 매핑 상속/서브 클래스
- 5. Python QtreeWidget : 트리 구조를 반환하십시오.
- 6. C# 기본 클래스를 상속 한 Python 클래스에 속성 클래스 적용
- 7. 다른 모듈을 모두 상속 받도록 Python 클래스를 정의하는 방법은 무엇입니까?
- 8. (Iron) Python 상속 생성자 문제
- 9. Python 클래스 상속
- 10. Python C++ 확장 상속
- 11. Python 상속 오류
- 12. 서브 클래스를 다른 서브 클래스에 캐스트
- 13. Python 유형 검사 및 상속 문제
- 14. C# 슈퍼 클래스로 서브 클래스를 선언하십시오.
- 15. XML을 클래스, 서브 클래스 및 속성으로 서브 클래스를 만들고 서브 클래스를 null로 만들지 마십시오.
- 16. NSManagedObject에서 상속 한 클래스를 호출하려면?
- 17. Jquery는 서브 클래스와 클래스를 정렬합니다
- 18. 서브 클래스를 동적으로 생성하십시오. iphone
- 19. 템플릿 서브 클래스를 반환 중
- 20. 지도가 서브 클래스를 받아들이지 않음
- 21. 액션 스크립트의 서브 클래스를 오버라이드
- 22. 서브 클래스를 삭제하고 부모도 삭제합니다.
- 23. RuntimeException의 서브 클래스를 다시 호출
- 24. 서브 클래스 관계로 Fluent NHibernate automap 상속
- 25. Python - 구식 클래스를 상속합니다.
- 26. Python 상속 - 함수 비활성화 방법
- 27. pdflatex에서 Mac의 python 서브 프로세스
- 28. Python 2에서 Python 3의 클래스를 비 꾸미기
- 29. 상속 문서 클래스를 상속 할 때 AS3 오류 1120
- 30. Python Tkinter 및 상속 비정상적인 동작
을 유형을 구분해야합니다. 상속의 한 가지 특징은 서브 클래스의 인스턴스가 수퍼 클래스의 인스턴스로 작동 할 수 있다는 것입니다. –
함수는 부모 함수에 있습니다. 새 객체를 반환합니다. 부모 인스턴스를 반환하면 자식 함수에 액세스 할 수 없습니다. 하지만 다른 어떤 아이도이 기능을 사용할 수 없기 때문에 (그리고 부모는 실제로는 그럴 수 없기 때문에) 아이를 돌려 줄 수는 없습니다. 그래서 나는 그것을 불렀던 어떤 것의 실체를 돌려주고 싶다. – user592419