我正在尝试扩展框架,我有类似的东西:
class A(object):
def test(self):
print(1)
class B(object):
def method(self):
a = A()
a.test()
class CustomA(A):
def test(self):
print(2)
class C(B):
def method(self):
A = CustomA
super(C, self).method()
c = C()
c.method()
A类和B类来自框架。
我想从A编辑这个test(),并让C使用这个新方法。
在此代码中,例如,如何使代码打印2而不是1?
[更新]
这只是一个简单的例子。我想延长this class。因此,不要创建SettingsPanel
,而是创建CustomSettingsPanel
但问题是我需要使用很多类,所以我只想要一种让python始终使用CustomSettingsPanel
而不是SettingsPanel
的方法。
答案 0 :(得分:1)
你不需要在C中调用super。你试图覆盖B的方法。
install.packages("foo", type="source", repos=NULL)
答案 1 :(得分:0)
有很多方法可以解决这个问题。
如果您可以修改B
,那么您可以对其进行重构,以便在A
中接受参数,而不是对___init___
进行硬性依赖,以允许其指定要实例化的类。类似的东西:
class B(object):
def __init___(self, clazz=A):
self.__clazz = clazz
def method(self):
a = self.__clazz()
a.test()
class C(B):
def __init__(self):
super(C, self).__init__(CustomA)
如果您无法修改B
,那么我建议将其包装在适配器中,让您的代码通过该类进行互动(而不是B
或{{1}然后通过flag参数管理适配器中C
vs A
选择的复杂性:
CustomA
还可以查看其他对象创建模式(工厂等)。一切都取决于你的约束以及你想要完成的事情。