Python property returning property object
我有一个这样的班级:
1 2 3 4 5 6 7 8 | class Foo(object): def __init__(self): self.bar = property(self.get_bar) def get_bar(self): return"bar" print Foo().bar #this prints <property object at 0x0051CB40> |
我已经看到了Python属性是如何工作的?,如何在uuinit_uuuuu中设置python属性,但它们都使用decorator方法,这不是因为我需要不同的名称。我需要访问EDOCX1[0]
我怎样才能让房产正常运转?
你需要做一个小小的改变:
1 2 3 4 5 6 7 8 | class Foo(object): def get_bar(self): return"bar" bar = property(get_bar) print Foo().bar # prints bar |
属性必须是类的属性,而不是实例;这就是描述符协议的工作方式。
你可以这样做
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Foo(object): def __init__(self): self.__bar = None def get_bar(self): return self.__bar def set_bar(self, value): self.__bar = value bar = property(get_bar, set_bar) foo = Foo() print foo.bar # None foo.bar = 1 print foo.bar # 1 |
您也可以这样做,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Foo(object): def __init__(self): self._bar = None @property def bar(self): return self._bar @bar.setter def bar(self, value): self._bar = value @bar.deleter def bar(self): self._bar = None # for instance |
相当于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Also_Foo(object): def __init__(self): self._bar = None def get_bar(self): return self._bar def set_bar(self, value): self._bar = value def del_bar(self): self._bar = None # for instance bar = property(fget=get_bar, fset=set_bar, fdel=del_bar, doc=None) |
但不会对每个属性使用
通过使用
对象未实例化。
1 2 3 4 5 6 7 | class Foo(object): def get_bar(self): return"bar" bar = Foo() print(bar.get_bar) |