請解釋一下我對 getter 和 setter 的不理解,當我嘗試實體化 Test 類時,這段代碼已經捕獲了例外?在我看來,同樣的方法在這里作業過。
我的目標是c根據aand進行更新b,據我所知,所有這些屬性都應該可以從類外部訪問,即公共欄位。
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'
uj5u.com熱心網友回復:
您的實施存在缺陷。
設定a取決于b已經設定。如果您交換 2 個賦值陳述句,__init__它將解決您當前的問題。但是請注意,您的實施存在很大缺陷。如果您更改b該更改將不會反映在c.
不需要對 and 使用 getter 和asetter b。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411402.html
標籤:
下一篇:僅在一種條件下打破兩個嵌套回圈
