【问题标题】:Get subclass name?获取子类名称?
【发布时间】:2010-07-23 00:50:03
【问题描述】:

是否可以获取子类的名称?例如:

class Foo:
    def bar(self):
        print type(self)

class SubFoo(Foo):
    pass

SubFoo().bar()

将打印:< type 'instance' >

我正在寻找获取"SubFoo"的方法。

我知道你可以做到isinstance,但我不知道先验类的名称,所以这对我不起作用。

【问题讨论】:

  • .. 至少,你可以使用issubclass(SubFoo, Foo)

标签: python


【解决方案1】:

你可以使用

SubFoo().__class__.__name__

这可能是题外话,因为它给你一个类名:)

【讨论】:

    【解决方案2】:
    #!/usr/bin/python
    class Foo(object):
      def bar(self):
        print type(self)
    
    class SubFoo(Foo):
      pass
    
    SubFoo().bar()
    

    object 的子类化为您提供了新样式的类(不再那么新 - python 2.2!)任何时候您想要大量使用 self 属性,如果您子类化,您将获得更多收益从对象。 Python 的文档 ...new style classes。从历史上看,Python 保留了旧式方式 Foo() 以实现向后兼容性。但是,这是很久以前的事了。没有太多理由不再从对象继承。

    【讨论】:

    • 而且Foo() 也不能在足够旧的 Python 版本上工作。
    【解决方案3】:

    当您使用新式类时,它会更好地工作。

    class Foo(object):
      ....
    

    【讨论】:

      【解决方案4】:

      SubFoo.__name__

      还有家长:[cls.__name__ for cls in SubFoo.__bases__]

      【讨论】:

        猜你喜欢
        • 2021-11-07
        • 2011-03-25
        • 2012-03-23
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多