[英]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.