首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否获取父类名称?

是否获取父类名称?
EN

Stack Overflow用户
提问于 2012-04-10 23:44:24
回答 3查看 75.5K关注 0票数 61
代码语言:javascript
代码运行次数:0
运行
复制
class A(object):
    def get_class(self):
        return self.__class__

class B(A):
    def __init__(self):
        A.__init__(self)

b = B()
print b.get_class()

此代码将打印<class '__main__.B'>

如何获取定义了方法的类名(即A)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-10 23:57:48

来自文档:https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy

类对象有一个__name__属性。通过派生类的__bases__属性来内省基类可能更干净(例如,如果代码位于派生类中)。

代码语言:javascript
代码运行次数:0
运行
复制
>>> class Base(object):
...     pass
...
>>> class Derived(Base):
...     def print_base(self):
...         for base in self.__class__.__bases__:
...             print base.__name__
...
>>> foo = Derived()
>>> foo.print_base()
Base
票数 85
EN

Stack Overflow用户

发布于 2012-04-11 00:17:25

inspect.getmro(cls)

按方法解析顺序返回cls类的基类的元组,包括cls。任何类都不会在此元组中出现多次。请注意,方法解析顺序取决于cls的类型。除非使用了非常特殊的用户定义元类型,否则cls将是元组的第一个元素。

代码语言:javascript
代码运行次数:0
运行
复制
import inspect
inspect.getmro(B)

结果将是:

代码语言:javascript
代码运行次数:0
运行
复制
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)

第一个元素是类本身,第二个元素总是父类的第一个。在那之后,事情可能会变得更复杂。

票数 60
EN

Stack Overflow用户

发布于 2012-04-10 23:53:13

你可以改变

代码语言:javascript
代码运行次数:0
运行
复制
return self.__class__

return A().__class__

由于没有A()的其他实例可用...

票数 -6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10091957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档