2012-06-20 68 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:谢谢你,我的错误。 –

相关问题