2012-06-20 96 views
1

比方說,我有以下代碼:有一個屬性裝飾方法在Python中返回一個類可以嗎?

class MyClass(object): 
    def __init__(self, param): 
     self.param = param 

    @property 
    def super_param(self): 
     return Param(self, self.param) 


class Param(object): 
    def __init__(self, parent, param): 
     self.param = param 
     self.parent = parent 

    @property 
    def get_parent(self): 
     return self.parent 

我的問題是,它認爲不好的做法,使用@property裝飾用這種方式?有沒有優點或缺點?

+5

你的方法返回不是類,但實例。每次都會返回新的實例。奇怪的行爲。 – astynax

回答

2

爲什麼不

class MyClass(object): 
    def __init__(self, param): 
     self.param = Param(self, param) 

我不覺得有什麼特別不妥返回從屬性的類;更好的問題是,你想通過這樣做來達到什麼目的?

編輯:,如果你不希望它發生變化,使之成爲私人財產:

class MyClass(object): 
    def __init__(self, param): 
     self._param = param  # naming convention, 'don't muck with it' 
     # OR 
     self.__param = param # name mangled 

    @property 
    def param(self): 
     return self._param 
+0

嗯,也許我是偏執狂,但我想避免讓用戶在類實例化後將param屬性設置爲另一個值 –

+1

您應該使用'self .__ param = param'而不是'self._param = param ',如果你想更多地隱藏用戶。這個名字將被破壞,並且從類外部可以以'some_object._MyClass__param'方式訪問,而在類中則以'self .__ param'方式訪問。 – Tadeck

+0

@Tadeck:謝謝你,我的錯誤。 –

相關問題