Python中如何使子类实例的类名属性返回父类类名
解决方案:让子类实例获取父类类名
要让子类实例拿到父类A的类名,不用额外加变量或显式设置,你可以用以下两种简洁方法:
方法一:直接引用父类自身的类名
在父类A的__init__方法里,直接用A.__name__代替type(self).__name__,这样不管子类怎么继承,这个值固定是父类A的名称:
class A: def __init__(self, obj={}, num=0): self.name = A.__name__ self.obj = obj self.num = num def add_to_db(self): pass class B(A): def __init__(self): super().__init__() def method1(self): print("b method") a = B() print(a.name) # 输出:A
方法二:通过类的继承关系动态获取
如果不想硬编码父类名称,可利用self.__class__.__base__拿到子类的直接父类,再取其类名,适合父类可能变化的场景:
class A: def __init__(self, obj={}, num=0): self.name = self.__class__.__base__.__name__ self.obj = obj self.num = num def add_to_db(self): pass class B(A): def __init__(self): super().__init__() def method1(self): print("b method") a = B() print(a.name) # 输出:A
注意事项
- 方法二的
__base__只返回第一个直接父类,如果你是多重继承场景,可能需要用__bases__(返回所有父类元组)并根据需求选择。 - 两种方法都不需要额外添加变量,也不用显式在子类里设置名称,完全符合你的要求。
内容的提问来源于stack exchange,提问作者user409
相关产品推荐
相关产品推荐

