如何使用property()将函数设置为对象的属性而不是类的属性?

问题描述 投票:0回答:1

我尝试在 Python 中的类的特定实例上使用 @property 装饰器,而不是在类本身上使用,但我遇到了问题。这是我通常做的事情:

class MyNet:
    def __init__(self):
        self.weight = 1  # Example value

    @property
    def quantized_weight(self):
        return quantize(self.weight)

但是,当我尝试将某个属性仅应用于

MyNet
类的一个实例时,它的行为并不符合预期:

class MyNet:
    def __init__(self):
        self.weight = 1  # Example value

net = MyNet()

def quantized_weight(self):
    return quantize(self.weight)

net.quantized_weight = property(quantized_weight)

执行上述代码后,当我尝试访问

net.quantized_weight
时,它没有返回量化函数的结果,而是给我
<property at 0x7fdcf422bd30>

有人可以解释为什么会发生这种情况以及如何纠正它以便该属性按预期在实例级别上工作吗?

我阅读了有关Python属性的文档:https://docs.python.org/3/library/functions.html#property

它表明属性应该在类中使用。

我发现这个:Python属性返回属性对象

那么,如何将函数作为实例的属性应用?我不想破坏另一个实例。

python python-3.x
1个回答
0
投票

一种可能的方法是将量化函数存储为实例属性,以便可以在每个实例的基础上进行更新:

class MyNet:
    def __init__(self):
        self.weight = 1  # Example value
        self.quantize = lambda value: value

    @property
    def quantized_weight(self):
        return self.quantize(self.weight)

net = MyNet()
print(net.quantized_weight) # outputs 1
net.quantize = lambda value: value * 2
print(net.quantized_weight) # outputs 2
© www.soinside.com 2019 - 2024. All rights reserved.