python - 您可以在第一次访问对象属性时对其进行初始化吗?

标签 python oop

我正在处理具有许多属性的对象。我没有使用所有属性,但如果我访问其中一个属性,我会多次使用它。是否可以仅在第一次访问属性时对其进行初始化。我想出了下面的代码,遗憾的是它真的很慢。

class Circle():
    def __init__(self,radius):
        self.radius = radius
        self._area = None
        
    @property
    def area(self):
        if self._area is None:
            self._area = self.radius**2 * np.pi
        return self._area

有没有一种有效的方法来实现这一目标?

最佳答案

对于 Python 3.8 或更高版本,请使用 @cached_property 装饰器。该值是在第一次访问时计算的。

from functools import cached_property

class Circle():
    def __init__(self,radius):
        self.radius = radius
        self._area = None
        
    @cached_property
    def area(self):
        if self._area is None:
            self._area = self.radius**2 * np.pi
        return self._area

关于python - 您可以在第一次访问对象属性时对其进行初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67969547/

相关文章:

Python重新匹配字符串中最后一个下划线

java.util.concurrent.TimeUnit 类设计模式

c# - 全局静态类和方法不好吗?

python - 范围内所有子函数中的重载函数

java - 使用 Java 设计读取器和处理器

java - 设计决策 : Adding new arguments to a method V/S creating an instance variable

php - 为 php 中另一个类的公共(public)变量设置值

Python:有吸引力的、干净的、可打包的 Windows GUI 库

python - for 循环内的 dataframe.replace()

c++ - 使用 ctypes.cdll.LoadLibrary 从 Python 加载库时 ELF header 无效