如何将@property发送到另一个可以使用它的类,以获取Python中属性的实际值

2024-03-29 12:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我解决问题的方法。但我希望有一种更简单、更美好的方式。我还不完全了解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?

Tags: 方法答案selfreftruesoexampledef
1条回答
网友
1楼 · 发布于 2024-03-29 12:42:57

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)

相关问题 更多 >