我有一个基类bc
,还有许多基于bc
的子类。
class bc(Object):
def get_subclass_name(self):
# Retrieve the name of the most derived subclass of this instance
pass
def somemethod(self):
x = self.get_subclass_name()
class sc1(bc):
pass
class sc2(bc)
pass
这个想法是,当在bc
的一个子类实例上调用somemethod()
时,它将能够使用该实例最终派生子类的名称,而不需要提前知道可能存在哪些子类。
我为此编写了一个测试用例:
class base_class(object):
@classmethod
def get_subclass_name(cls):
return cls.__name__
def somemethod(self):
print(base_class.get_subclass_name())
class sub_class(base_class):
pass
sub_class().somemethod()
当运行此代码时,它会产生`base_class`而不是`sub_class`。
class sc3(sc2)
,那么对于sc2
的实例来说,“最派生的子类”是sc3
还是仍然是sc2
? - tobias_kself
调用它,就可以正常工作了。你正在显式地传递基类,而不是当前类。print(base_class.get_subclass_name())
- tobias_k