我有一個如下的類。我想保持_my_var = None,如果用戶沒有為其提供一個值。他們可以使用setter來設定它,在這里我強制進行一些驗證
。class A。
_my_var = None: _my_var = None.
@property: _my_var = None.
def my_var(self)。
return self._my_var
@property.setter: return self._my_var.
def my_var(self, value)
# 一些驗證。
return._my_var = value
我在下面的代碼中創建一個物件
x = A()
當我查看x所具有的屬性時
_my_var: None。
my_var: None
當我設定x._myvar = 10時,my_var和_my_var屬性都被設定為10。我對此有一個困惑。_my_var是一個欄位,而my_var是一個函式嗎?如何才能只保留_my_var這個屬性,同時強制setter來設定它呢?
uj5u.com熱心網友回復:
這是因為你讓my_var成為一個屬性,但是在函式中它回傳self._my_var,所以如果你把self._my_var改為10,然后你再次呼叫my_var函式,它將回傳修改后的self._my_var值。
將my_var函式設定為@property可能會使你感到困惑,它表現為只是類的屬性,但它實際上是一個函式,只是它的呼叫沒有括號。如果你把它變成一個沒有@property的普通函式,例如:
def my_var(self)。
return self._my_var
這樣的話,它是一個函式就更明顯了,因為你會像這樣呼叫它:
。x._myvar = 10。
print(x.my_var())
將給出:
10
這將使它更明顯。
為了使它不根據_my_var的變化而變化,把函式改為變數,所以要代替:
def my_var(self)。
return self._my_var
使之成為:
self.my_var = int(self._my_var)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313124.html
標籤:
