Python中动态设置实例属性

2024-04-19 19:37:52 发布

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

我有一个具有两个实例属性的类。例如:

class Test(): 
    def __init__(self, parameter):
        self.one = self.somefunction(parameter)
        self.two = 'somestring'

在同一个类中,我定义了一个函数somefunction,根据上面的编码,它将在对象创建时被调用。当我尝试这个的时候,我可以自我。一当我在somefunction(参数)中返回一些值时,例如:

^{pr2}$

不过,这感觉不太好练习。什么的是动态设置实例初始值的最佳方法吗?在


Tags: 实例函数testself编码属性定义parameter
1条回答
网友
1楼 · 发布于 2024-04-19 19:37:52

你所做的一切没有错,除非somefunction需要很长时间才能回来。通常,您不希望对象创建/实例化花费很长时间。如果计算该属性需要很长时间,则应在第一次访问该属性时进行计算。而这可以通过财产获取者来实现。在

import time

class Foo(object):

    def __init__(self, parameter):
        self._one = None
        self.two = "some_string"
        self._parameter = parameter

    @property
    def one(self):
        if self._one is None:
            self.one = self._some_method()
        return self.one

    def some_method(self):
         time.sleep(10)
         return sorted(self._parameter)

当您调用foo.one时,Python将检查“protected”属性是否仍然是None。如果是,那么它将执行昂贵的函数调用。下次尝试访问它时,它将使用保存的值。在

相关问题 更多 >