我是一名新手python程序员。
我有一些关于财产的小问题,哪个更好。
在类中,哪个是按属性或变量本身访问变量的标准?
例如,下面的代码之间哪个是更好的方法,baz1和baz2? baz1和baz2之间有什么区别吗?
class Foo:
def __init__(self):
self._bar = 3
@property
def bar(self):
return self._bar
def baz1(self):
return self.bar+1
def baz2(self):
return self._bar+1
答案 0 :(得分:1)
如果您的目标是阻止修改变量,则可以在没有setter的情况下对属性使用属性。如果有人试图修改该值,这将引发异常。请注意,这不能确保无法修改变量:
class Foo:
def __init__(self):
self._bar = 3
@property
def bar(self):
return self._bar
foo = Foo()
foo._bar # output 3
foo.bar # output 3
foo.bar = 1 # raise an exception
foo._bar = 1 # _foo will be change to 1
如果您只想访问和修改实例外的属性。你不必使用任何财产之王:
class Foo:
def __init__(self):
self.bar = 3
foo = Foo()
foo.bar # output 3
foo.bar = 1 # _foo will be change to 1
如果要对输入进行一些计算或验证,可以使用get / set属性:
class Foo:
def __init__(self):
self._bar = 3
@property
def bar(self):
return self._bar + 1
@bar.setter
def bar(self, new_bar):
assert isinstance(new_bar, int)
self._bar = new_bar
foo = Foo()
foo.bar # output 4
foo.bar = 1 # _foo will be change to 1
foo.bar = 'bar' # raise assertion error