我有以下 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 ...
实例变量可以以 a__
为前缀,以使其成为该实例的私有变量。所以你可以肯定,变量不能从外部改变。此外,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
如果您正确封装了属性,您就可以控制您的实例。希望这是有道理的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句