【问题标题】:Why can't I access the instance.__class__ attribute in Python?为什么我无法在 Python 中访问 instance.__class__ 属性?
【发布时间】:2010-05-14 15:54:06
【问题描述】:

我是 Python 新手,我知道我一定遗漏了一些非常简单的东西,但是为什么这个非常非常简单的代码不起作用?

class myClass:
    pass

testObject = myClass
print testObject.__class__

我收到以下错误:

AttributeError: class myClass has no attribute '__class__'

Python 中的每个对象不是都有__class__ 属性吗?

【问题讨论】:

  • 错误只存在于 Python 2.x。在 Python 3.1 中,__class__ 不会产生错误。而且,你为什么还在使用老式的类?
  • @KennyTM - 这可能很密集,但是......什么是旧式类?
  • 不是从object派生的类。
  • @KennyTM - 在 Python 中,您是否应该从对象显式派生所有类? (如果是,为什么?)
  • 所有新风格的类都应该派生自顶层的object。详情请见stackoverflow.com/questions/54867/…

标签: python class-attribute


【解决方案1】:

我想我意识到了自己的错误。我认为代码testObject = myClass 正在创建类的新实例/对象,但它实际上是为类本身分配了一个引用。我将代码更改为:

class myClass: 
    pass 

testObject = myClass() 
print testObject.__class__ 

它现在可以按我的预期工作

【讨论】:

    【解决方案2】:

    Python 中的大多数(但不是全部)对象都有__class__ 属性。您通常可以访问它来确定对象的类。

    你可以通过调用type来获取any对象的类。

    >>> class myClass:
    ...     pass
    ... 
    >>> testObject = myClass
    >>> type(testObject)
    <type 'classobj'>
    

    【讨论】:

      【解决方案3】:

      旧式类没有__class__ 属性。

      class myClass(object):
          pass
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        相关资源
        最近更新 更多