如何将@property发送到另一个可以使用它的类来获取Python中

时间:2018-03-27 13:29:54

标签: python properties pass-by-reference

这是我解决问题的方法。但我希望有一种更轻松,更美丽的方式。我还不知道关于Python的所有内容,但我没有得到任何答案 - 问题和答案是关于另一个问题。也许我看起来很糟糕,或者有一种完全不同的方法,不需要参考。我需要通过链接到属性的类,始终可以独立地接收其值,而不接收其他提醒,以及直接值。

class SomeObject:
    def __init__(self):
        self._someproperty =None
        self.somepropertyRef=SomeObject.__dict__['someproperty'] # reference
    @property # I need pass property as a parameter like a function
    def someproperty(self): 
        return self._someproperty
    @someproperty.setter
    def someproperty(self, someproperty): 
        self._someproperty = someproperty

so = SomeObject()

# 1) example without using ref 
so.someproperty="123"
temp = so.someproperty
print(temp == so.someproperty) # True
so.someproperty=0
print(temp == so.someproperty) # Of course, False!

# 2) example with using ref 
temp = (so.somepropertyRef, so) # Oh...
print(temp[0].fget(temp[1]) == so.someproperty) # True. But long way...
so.someproperty="456"
print(temp[0].fget(temp[1]) == so.someproperty) # True. How to do the same easy?

1 个答案:

答案 0 :(得分:0)

SomeObject.someproperty是您要查找的参考。属性是具有特殊行为的类属性,其中包括从类的实例调用。

temp = (SomeObject.someproperty, so)

如果您只想访问该值,也可以将引用保存到SomeObject.someproperty.fget

temp = (SomeObject.someproperty.fget, so)
print(temp[0](temp[1]) == so.someproperty)
so.foo = 456
print(temp[0](temp[1]) == so.someproperty)