我可以讓一個類繼承Python中的「in-program」類嗎?在python中以編程方式向類繼承繼承?
繼承人是我迄今爲止:
base = list(cls.__bases__)
base.insert(0, ClassToAdd)
base = tuple(base)
cls = type(cls.__name__, base, dict(cls.__dict__))
我可以讓一個類繼承Python中的「in-program」類嗎?在python中以編程方式向類繼承繼承?
繼承人是我迄今爲止:
base = list(cls.__bases__)
base.insert(0, ClassToAdd)
base = tuple(base)
cls = type(cls.__name__, base, dict(cls.__dict__))
下面是一個例子,使用格雷格Hewgill的建議:
class Foo(object):
def beep(self):
print('Hi')
class Bar(object):
x=1
bar=Bar()
# bar.beep()
# AttributeError: 'Bar' object has no attribute 'beep'
Bar=type('Bar',(Foo,object),Bar.__dict__.copy())
bar.__class__=Bar
bar.beep()
# Hi
另一種方法是不改變的類層次結構動態,但裝飾對象的實例與新的功能。這通常更清晰且更容易調試,因爲您只需更改代碼所在的對象,而無需對整個類層次結構進行橫切更改。
def extend_object(obj):
class ExtensionClass(obj.__class__):
def new_functionality(self):
print "here"
obj.__class__ = ExtensionClass
b = Foo()
extend_object(b)
b.new_functionality()
#prints "here"
你想創建一個新的類定義,還是將父項添加到現有的類定義中,或者將父項添加到現有的實例? – Ipsquiggle 2010-05-06 20:10:15