파이썬에서 다형성은 어떻게 작동합니까?
저는 Python을 처음 접했으며 대부분 Java 배경에서 왔습니다.
파이썬에서 다형성을 이해하려고합니다. 아마도 문제는 내가 이미 알고있는 개념이 파이썬에 투영 될 것으로 기대하고 있다는 것입니다. 하지만 다음 테스트 코드를 작성했습니다.
class animal(object):
"empty animal class"
class dog(animal):
"empty dog class"
myDog = dog()
print myDog.__class__ is animal
print myDog.__class__ is dog
다형성에서 나는 (예를 들어, 자바의 사용 해요 instanceof
개의 인스턴스로), 나는이 문장의 모두에 해당 인쇄 기대 입니다 동물과도 A는 개. 하지만 내 결과는 다음과 같습니다.
False
True
내가 무엇을 놓치고 있습니까?
is
Python 의 연산자는 두 인수가 메모리의 동일한 객체를 참조하는지 확인합니다. is
C # 의 연산자 와는 다릅니다.
문서에서 :
연산자는 객체 ID에 대한 테스트이며 그렇지 않습니다. x는 y이며 x와 y가 동일한 객체 인 경우에만 true입니다. x is not y는 역 진리 값을 생성합니다.
이 경우 찾고있는 것은 isinstance
.
객체 인수가 classinfo 인수의 인스턴스이거나 (직접 또는 간접) 하위 클래스의 인스턴스이면 true를 반환합니다.
>>> class animal(object): pass
>>> class dog(animal): pass
>>> myDog = dog()
>>> isinstance(myDog, dog)
True
>>> isinstance(myDog, animal)
True
그러나 관용적 인 Python은 (거의) 유형 검사를 수행하지 않고 대신 다형성 동작을 위해 덕 타이핑 에 의존합니다 . isinstance
상속을 이해하기 위해 사용 하는 데 잘못된 것은 없지만 일반적으로 "프로덕션"코드에서는 피해야합니다.
phimuemue와 Mark가 귀하의 질문에 답변했습니다. 그러나 이것은 또한 파이썬에서 다형성의 예이지만 상속 기반 예만큼 명시 적이 지 않습니다.
class wolf(object):
def bark(self):
print "hooooowll"
class dog(object):
def bark(self):
print "woof"
def barkforme(dogtype):
dogtype.bark()
my_dog = dog()
my_wolf = wolf()
barkforme(my_dog)
barkforme(my_wolf)
Try isinstance(myDog, dog)
resp. isinstance(myDog, animal)
.
참고URL : https://stackoverflow.com/questions/2835793/how-does-polymorphism-work-in-python
'Development Tip' 카테고리의 다른 글
.NET 용 무료 바코드 API (0) | 2020.12.07 |
---|---|
파이썬의 zip과 같은 PHP 함수가 있습니까? (0) | 2020.12.07 |
LaTeX에서 기호를 다른 기호 위에 두는 방법은 무엇입니까? (0) | 2020.12.07 |
MSBuild를 통한 MSDeploy에 대한 유효한 매개 변수 (0) | 2020.12.07 |
함수가 호출 될 때 인쇄하는 방법 (0) | 2020.12.07 |