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
)?
发布于 2012-04-10 23:57:48
来自文档:https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy
类对象有一个__name__
属性。通过派生类的__bases__
属性来内省基类可能更干净(例如,如果代码位于派生类中)。
>>> 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
发布于 2012-04-11 00:17:25
按方法解析顺序返回cls类的基类的元组,包括cls。任何类都不会在此元组中出现多次。请注意,方法解析顺序取决于cls的类型。除非使用了非常特殊的用户定义元类型,否则cls将是元组的第一个元素。
import inspect
inspect.getmro(B)
结果将是:
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
第一个元素是类本身,第二个元素总是父类的第一个。在那之后,事情可能会变得更复杂。
发布于 2012-04-10 23:53:13
你可以改变
return self.__class__
return A().__class__
由于没有A()的其他实例可用...
https://stackoverflow.com/questions/10091957
复制相似问题