AttributeError:“属性”对象没有属性


问题内容

Python(2.6)似乎无缘无故地消失,有人能看到这段代码有问题吗?

class DB ():
    def doSomething (self, str):
        print str

class A ():
    __db = DB()

    @staticmethod
    def getDB ():
        return A.__db

    db = property(getDB)


A.db.doSomething("blah")

失败,但以下情况除外:

AttributeError:“属性”对象没有属性“ doSomething”

我的理解是,属性在访问时会自动运行其getter,那么为什么它抱怨一个属性对象,为什么它找不到我明确可用的方法?


问题答案:

除了需要继承之外object,属性仅适用于实例。

a = A()
a.db.doSomething("blah")

要使属性适用于该类,可以定义一个元类。(类是元类的实例,因此在元类上定义的属性在该类上起作用,就像在类上定义的属性在该类的实例上起作用一样。)