2014-02-16 59 views
4

我有這樣一個類:Python中的財產返還財產對象

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> 

我見過How do Python properties work?How to set a python property in __init__,但它們都使用裝飾方法,我不因爲我希望有一個不同的名稱。我需要訪問self

我如何獲取屬性的行爲?

+2

爲什麼要使用不同的名稱?有沒有合理的理由? –

+0

你有沒有嘗試過使用屬性作爲裝飾或與文檔字符串? –

+0

快速解決方案將顯式調用'bar'上的'__get__':'f = Foo(); f.bar .__ get __(f,type(f))' –

回答

4

你需要做一個小的改動:

class Foo(object): 

    def get_bar(self): 
     return "bar" 

    bar = property(get_bar) 

print Foo().bar # prints bar 
+0

get_bar未定義。 Idk我做錯了 – gcq

+0

我在函數之前定義了屬性。現在好了。 – gcq

+0

@gcq現在,嘗試設置'bar'的值。 – thefourtheye

5

你可以像下面這樣做

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 
0

你也可以做到像顯示here

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 

這是相當於:

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) 

但是沒有污染與每個屬性getset方法的類名稱空間。

您保留通過使用._bar而不是.bar的外部直接訪問變量。

-1

該對象未被實例化。

class Foo(object): 

def get_bar(self): 
    return "bar" 

bar = Foo() 
print(bar.get_bar)