나는 다음과 같이 파이썬에서 두 개의 클래스가 있다고 가정피
class Parent(object):
def __init__(self):
self.num = 0
def fun1(self):
print 'p.fun1'
def fun2(self):
self.fun1()
print 'p.fun2'
및
from parent import Parent
class Child(Parent):
def __init__(self):
super(Child,self).__init__()
def fun1(self):
print 'c.fun1'
def fun2(self):
super(Child, self).fun2()
print 'c.fun2'
내가
from child import Child
test = Child()
test.fun2()
아이
의
fun2
를 호출하는 경우
출력이 표시됩니다.
c.fun1
p.fun2
c.fun2
Child.fun2()
의 전화가 Parent.fun2()
으로 이어지는 것을 의미합니다. 그러나 Parent.fun2()
안에는 self.fun1()
을 사용합니다.이 경우에는 내 테스트에서 Child.fun1()
으로 해석됩니다.
하지만 실제로는 클래스 Parent
을 개인으로 지정하고 Parent.fun2()
은 항상 Parent.fun1()
을 사용하고 싶습니다.
어떻게 이것을 피할 수 있습니까?
Parent.__fun1()
에 Parent.fun1()
비공개로 설정할 수 있음을 알고 있습니다. 그러나 나는 Parent
의 몇 가지 경우를 가지고 있는데이 부분 외부에서 Parent.fun1()
을 사용해야합니다. 즉, 실제로 fun1()
을 재정의해야한다는 의미입니다.
당신이 의미하는 것이 약간 명확하지 않습니다. Parent 인스턴스는 항상 Parent.fun1을 호출하고 Child 인스턴스는 항상 Child.fun1을 호출합니다. –
불만을해서 죄송합니다. 나는 그것을 원한다.'Parent' 클래스에서'self.fun1()'의 사용은'Parent.fun1()'만 참조하면된다. 내 테스트에서'Child'의 인스턴스를 생성했기 때문에'Child.fun2()'를 사용하면'Parent.fun2()'로 연결됩니다. 그리고'Parent.fun2()'에 대한이 호출은 Child.fun1()을 호출하지만,'Parent.fun1()'을 호출하기를 원합니다. 출력 결과가'p.fun1 p.fun2 c.fun2'이되기를 바랍니다. – zXu
그러면 왜 'fun1'을 하위 클래스에 구현합니까? – jonrsharpe