实例变量作为其他实例变量的函数
Posted
技术标签:
【中文标题】实例变量作为其他实例变量的函数【英文标题】:Instance variable as function of other instance variables 【发布时间】:2020-03-22 02:15:52 【问题描述】:是否可以将一个类中的实例变量定义为另一个类的函数?除非您一直重新定义“函数实例变量”,否则我还没有让它工作。
基本上,您可能会有一个实例变量,它是一个整数列表,并希望将这些整数的总和作为实例变量,每次更新列表时都会自动重新定义。
这可能吗?
class Example:
list_variable = []
sum_variable = sum(list_variable)
def __init__(self, list_variable):
self.list_variable = list_variable
return
这将导致sum_variable = 0
除非您更改它。
我知道这远不是一个主要问题,您可以将sum_variable
定义为一种方法,也可以在每次更改list_variable
时重新定义它,我只是想知道是否可以跳过这些事情/步骤。
【问题讨论】:
Real world example about how to use property feature in python?的可能重复sum_variable
可以是一个property
,它是在被访问时从list_variable
(可能也被缓存)计算出来的。
【参考方案1】:
Python 为您的示例的语法相同的用法提供了属性装饰器:
class Example:
list_variable = []
def __init__(self, list_variable):
self.list_variable = list_variable
return
@property
def sum_variable(self):
return sum(self.list_variable)
e = Example(list_variable=[10, 20, 30])
e.sum_variable # returns 60
【讨论】:
我之前在看这个。该属性并不完全等同于 OP 的问题,因为Example.list_variable
将是 [10,20,30]
但 Example.sum_variable
给出了一个属性对象。有没有什么方法可以返回Example.sum_variable
,而不是创建Example
的实例?
你可能不得不使用这样的东西:using property on classmethods。话虽如此,在我上面的代码Example.list_variable
中仍然是[]
,而不是[10, 20, 30]
,因为创建我的实例e
不会影响类变量list_variable
- 它只是覆盖self.list_variable
命名空间对于那个特定的实例,而不是整个类。
好点。话又说回来,刚刚意识到这篇文章确实谈到了实例变量,即使该示例将 sum_variable
定义为类变量,所以我想它应该回答 OP。以上是关于实例变量作为其他实例变量的函数的主要内容,如果未能解决你的问题,请参考以下文章