使用Python派生类在父类的方法?
-
21-09-2019 - |
题
我可以迫使一个父类调用派生类的版本功能?
class Base(object):
attr1 = ''
attr2 = ''
def virtual(self):
pass # doesn't do anything in the parent class
def func(self):
print "%s, %s" % (self.attr1, self.attr2)
self.virtual()
和一个类,从中导出
class Derived(Base):
attr1 = 'I am in class Derived'
attr2 = 'blah blah'
def virtual(self):
# do stuff...
# do stuff...
消解含糊:
d = Derived()
d.func() # calls self.virtual() which is Base::virtual(),
# and I need it to be Derived::virtual()
解决方案
如果您实例化一个Derived
(比如d = Derived()
),这是由.virtual
名为为 d.func()
的Derived.virtual
。如果没有涉及Derived
的实例,则有一个为self
没有合适Derived.virtual
等当然这是不可能的调用它。
其他提示
这不是不可能的 - 有解决的办法其实,你不必在功能或类似的东西通过。我工作的一个项目,我自己在那里这个确切的问题上来。这里是解决方案:
class Base(): # no need to explicitly derive object for it to work
attr1 = 'I am in class Base'
attr2 = 'halb halb'
def virtual(self):
print "Base's Method"
def func(self):
print "%s, %s" % (self.attr1, self.attr2)
self.virtual()
class Derived(Base):
attr1 = 'I am in class Derived'
attr2 = 'blah blah'
def __init__(self):
# only way I've found so far is to edit the dict like this
Base.__dict__['_Base_virtual'] = self.virtual
def virtual(self):
print "Derived's Method"
if __name__ == '__main__':
d = Derived()
d.func()
好,我刚结束了传递的虚拟实例()我需要FUNC()
class Base(object):
attr1 = ''
attr2 = ''
def __init__(self):
pass
def virtual(self):
pass
def func(self, cb):
print "%s, %s" % (self.attr1, self.attr2)
cb()
class Derived(Base):
attr1 = 'I am in class Derived'
attr2 = 'blah blah'
def virtual(self):
# do stuff...
# do stuff...
d = Derived()
d.func(d.virtual)
不隶属于 StackOverflow