的Python(2.6)似乎有derping没有理由,任何人都可以看到一个问题,这个代码?
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的”
这是我的理解是,当访问一个属性将自动运行其吸气剂,所以为什么它抱怨一个属性对象,为什么没有找到我明确可行的方法?
除了需要从继承object
,属性只能在实例工作。
a = A()
a.db.doSomething("blah")
为了使对类属性的工作,你可以定义一个元类。 (A类是一个元类的一个实例,因此性能上类上的元类定义工作,正如在在该类的实例的类的工作定义的属性。)
您没有使用正确的类。 一类是(通常)两件事情:
- 该工厂用于组建家庭相关的对象
- 这些对象的共同行为的定义
这些相关的对象是类的实例 。 正常的方法调用的类的实例 ,而不是类本身。 如果你想,可以从类中调用的方法,没有一个实例,你需要标注与方法@classmethod
(或@staticmethod
)。
但是我真的不知道从类对象检索时属性是否正常工作。 我现在不能检查,但我不这么认为。 你所得到的错误是A.db
被检索的属性对象定义的属性本身,它不是“评估”的属性来获取A.__db
。 属性对象没有doSomething
属性。 性能是设计类作为这些类的实例是如何工作的描述来创建。
如果你是打算用一个实例来工作,那么你就需要创建一个:
my_a = A()
my_a.db.doSomething("blah")
然而,这也将失败。 您还没有正确地写入getDB
任何一种方法。 普通方法需要一个参数来表示它是在(传统上被称为调用的情况下self
):
def getDB(self):
...
静态方法不这样做,但需要一个装饰他们标记为静态:
@staticmethod
def getDB():
...
类方法既需要一个参数来接收他们调用的类和装饰:
@classmethod
def getDB(cls):
...
你不需要在Python干将:
class B(object):
def do_something(self, str):
print str
class A(object):
db = B()
A.db.do_something("blah")
(I也PEP8:编码)