在Python中获取超类内部的子类名称

4

我有一个名为Person的超级类,我将其扩展为Employee。 我想在超级(父级)类中打印此扩展(子)类的名称。

这是可能的吗? 如果可以,我该如何打印子类名称?


在扩展阶段 - 是的(子类钩子) - RomanPerekhrest
一个类的所有基类都可以通过该类的__bases__属性访问;也就是说,Person将出现在元组Employee.__bases__中。 - chepner
1
@chepner 我相信这里想要的是逆反关系。class Employee(Person),并且从Person中获取Employee的名称。 - Tomerikoo
@Tomerikoo 是的,我想从Person超类中获取名称为Employee的类名。 - iso_9001_
1
糟糕。那么您可以检查Person.__subclasses()__的返回值(它是所有子类的列表;您需要确定您真正感兴趣的子类)。例如,尝试在某个时候使用object.__subclasses__() - chepner
显示剩余4条评论
1个回答

8

你可以使用type(self).__name__来实现。

type(self)会获取self真正所属的类,即使它是在一个基类中调用也可以。

所有类都有一个__name__属性,它返回它们的名称字符串。


1
这就是我一直在寻找的答案。谢谢! - iso_9001_
你需要使用 __subclasses__() 方法来访问子类。 - Bugs Buggy
1
@BugsBuggy:我认为这个问题最常见的用例是获取给定实例的类。使用__subclasses__,没有实例可以获取其类。也许OP没有完全明确,但在我看来,__subclasses__超出了他们所问的范围。 - luther
你不需要实例来调用子类。问题说明需要从父类获取“child”类的名称。 - Bugs Buggy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接