代码之家  ›  专栏  ›  技术社区  ›  Bryan Ward

获取子类名称?

  •  20
  • Bryan Ward  · 技术社区  · 14 年前

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

    class Foo:
        def bar(self):
            print type(self)
    
    class SubFoo(Foo):
        pass
    
    SubFoo().bar()
    

    将打印: < type 'instance' >

    我在找一种方法 "SubFoo" .

    我知道你能做到 isinstance 但是我不知道A班的名字,所以这对我不起作用。

    4 回复  |  直到 8 年前
        1
  •  8
  •   nate c    14 年前
    #!/usr/bin/python
    class Foo(object):
      def bar(self):
        print type(self)
    
    class SubFoo(Foo):
      pass
    
    SubFoo().bar()
    

    从子类化 object 为您提供了新的样式类(不再是新的了-python 2.2!)每当你想使用self属性的时候,如果你从object子类化,你会得到更多的回报。巨蟒的文档… new style classes . 历史上,python离开了旧的风格 Foo() 为了向后兼容。但是,这是很久以前的事了。不再有太多的理由不从对象中进行子类划分。

        2
  •  13
  •   mykhal    14 年前

    你可以使用

    SubFoo().__class__.__name__
    

    这可能不是主题,因为它给了您一个类名:)

        3
  •  2
  •   Ignacio Vazquez-Abrams    14 年前

    当您使用新样式的类时,它的工作效果要好得多。

    class Foo(object):
      ....
    
        4
  •  1
  •   Jason Scheirer    14 年前

    SubFoo.__name__

    父母: [cls.__name__ for cls in SubFoo.__bases__]