实例变量作为其他实例变量的函数

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。

以上是关于实例变量作为其他实例变量的函数的主要内容,如果未能解决你的问题,请参考以下文章

Java 实例变量数组大小基于另一个实例变量

TypeScript:当提供变量 CLASS 作为函数参数时,将返回类型推断为该类的实例(仅来自参数)

实例变量,局部变量,全局变量,静态全局变量

本地 和 实例 变量之间有啥区别

在Java程序设计中实例变量和类变量有啥区别?

当类的实例在 js 中需要不同的函数和变量时,有啥更好的方法?