클래스 B의 __new__
은 A의 __new__
을 호출해야합니다. 다음은 내장 된 list
클래스를 사용하는 간단한 데모입니다.
class mylist(list):
def __new__(cls, obj=None):
return list.__new__(cls, obj)
def mymethod(self, msg):
print msg, id(self)
def main():
a = mylist('abc')
print a, id(a)
a.mymethod('hello')
if __name__ == '__main__':
main()
그냥 기존 클래스의 인스턴스에 간단한 기능을 추가하려는 경우, 당신은 이런 종류의 작업을 수행 할 수 있습니다. 이 수행 b.my
그냥 함수가 아닌 방법, 그래서 당신이 그것을 호출 할 때 하지 자기를 전달받을 것을
는
class A(object):
pass
def silly(arg=None):
print 'This is silly', arg
b = A()
b.my = silly
b.my()
참고.
def __new__(cls, obj=None):
return super(mylist, cls).__new__(cls, obj)
그러나 대부분 :하지만 당신은 list.__new__(cls, obj)
를 작성하는 대신 b.my(b)
편집
를 수행하여 "손으로"전달할 수 있습니다, 당신은 super()
함수를 호출 할 수 있습니다 기본 클래스 이름을 사용하는 사례가 더 명확하고 짧아집니다. 나는 이 인 것을 좋아하는 이유가되어야한다고 생각하지만, 나는이 말을하는 전문가로서는 충분하지 않다. :)
관련 항목 : http://stackoverflow.com/questions/25394550/adding-methods-to-an-existing-class-inst-or-how-to-subclass-an-instance –
@NickT : 감사합니다. . 너무 복잡해 보인다. 언어가 이런 종류의 기본적인 OOP 자료를 지원하지 않습니까? C++에서는 짧은 한 줄짜리가 될 것입니다. 루비 (AFAIK)와 동일합니다. 아니면 파이썬이 이런 식으로 작동하지 않습니까? 혼란 스럽네요 ... –
데코레이터를 사용할 수 있어야합니다. http://thecodeship.com/patterns/guide-to-python-function-decorators/ – user4107395