繁体   English   中英

推迟类属性初始化的最佳方法是什么?

[英]What's the best approach to defer class attribute initialization?

我有以下 OO 用例:

class SomeClass(object):

    def __init__(self, arg1):
        self.attr_now = arg1
        self.attr_later = None

    def compute(self):
        # do some lengthy computation ...
        self.attr_later = x # some result
        # continue work ... 

这是延迟属性attr_later初始化的理想方法还是有更好的方法? 我看到的是attr_later的类型不安全,因为它可能会在封闭实例的生命周期内改变类型......

由于您在谈论 OO 用例,因此我认为您必须了解可以执行哪些访问修改来保护属性的值和类型。

想想这个

class SomeClass(object):

    def __init__(self, arg1):
        self.__attr_now = arg1
        self.__attr_later = None

    @property
    def attr_later(self):
        return self.__attr_later

    def compute(self):
        # do some lengthy computation ...
        self.__attr_later = x # some result
        # continue work ... 

实例变量可以以__为前缀,以使其成为该实例的私有变量。 所以你可以肯定,变量不能从外部改变。 此外,为变量创建一个property ,以便您可以从外部访问该值。

如果您认为,您想从外部设置值,定义一个setter并控制传入的分配 - 类似于

@attr_later.setter
def attr_later(self, attr_val):
    if isinstance(attr_val,str):
        self.__attr_later = attr_val
    else:
        raise 
        # or do damage control

如果您正确封装了属性,您就可以控制您的实例。 希望这是有道理的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM