使用具有三个属性的 getter 和 setter
Using getter and setter with three attributes
请解释一下我对 getter 和 setter 的不理解,当我尝试实例化测试 class 时,这段代码已经捕获了异常?
在我看来,同样有效 here.
我的目标是根据 a
和 b
更新 c
,其中所有这些属性都应该可以从 class 外部访问,即 public 字段,据我了解。
class Test:
def __init__(self, p1=50, p2=20):
self.a = p1
self.b = p2
@property
def a(self):
return self._a
@a.setter
def a(self, val):
self._a = val
self._c = self.b - val // 5
@property
def b(self):
return self._b
@b.setter
def b(self, val):
self._b = val
@property
def c(self):
return self._c
>>> c = Test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...\getter_and_setter.py", line 3, in __init__
self.a = p1
File "...\getter_and_setter.py", line 12, in a
self._c = self.b - val // 5
File "...\getter_and_setter.py", line 16, in b
return self._b
AttributeError: 'Test' object has no attribute '_b'
您的实施存在缺陷。
设置 a
取决于已经设置的 b
。如果您交换 __init__
中的 2 个赋值语句,它将解决您当前的问题。但是请注意,您的实施存在很大缺陷。如果您更改 b
,该更改将不会反映在 c
。
a
和 b
不需要使用 getter 和 setter。
class Test:
def __init__(self, p1=50, p2=20):
self.a = p1
self.b = p2
@property
def c(self):
return self.b - self.a // 5
请解释一下我对 getter 和 setter 的不理解,当我尝试实例化测试 class 时,这段代码已经捕获了异常? 在我看来,同样有效 here.
我的目标是根据 a
和 b
更新 c
,其中所有这些属性都应该可以从 class 外部访问,即 public 字段,据我了解。
class Test:
def __init__(self, p1=50, p2=20):
self.a = p1
self.b = p2
@property
def a(self):
return self._a
@a.setter
def a(self, val):
self._a = val
self._c = self.b - val // 5
@property
def b(self):
return self._b
@b.setter
def b(self, val):
self._b = val
@property
def c(self):
return self._c
>>> c = Test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...\getter_and_setter.py", line 3, in __init__
self.a = p1
File "...\getter_and_setter.py", line 12, in a
self._c = self.b - val // 5
File "...\getter_and_setter.py", line 16, in b
return self._b
AttributeError: 'Test' object has no attribute '_b'
您的实施存在缺陷。
设置 a
取决于已经设置的 b
。如果您交换 __init__
中的 2 个赋值语句,它将解决您当前的问题。但是请注意,您的实施存在很大缺陷。如果您更改 b
,该更改将不会反映在 c
。
a
和 b
不需要使用 getter 和 setter。
class Test:
def __init__(self, p1=50, p2=20):
self.a = p1
self.b = p2
@property
def c(self):
return self.b - self.a // 5