我想知道是否有可能有一個屬性設置器也返回一個值。下面的代碼試圖從表面上解釋這個問題。Python的二傳手也返回一個值
基本上我需要設置一個屬性到一個對象,但在我需要檢查它是否唯一之前。我想知道是否有辦法直接向用戶返回唯一名稱,而不需要事後查詢對象的新名稱。
class MyClass(object):
def __init__(self,ID):
self._ID = ID
@property
def Name(self):
return DBGetName(self._ID)
@Name.setter
def Name(self, value):
UniqueName = DBGetUniqueName(self._ID,value)
return DBSetName(UniqueName)
Myinstance = MyClass(SomeNumber)
#What I do now
Myinstance.Name = "NewName"
Uniquename = Myinstance.Name
#What I was wondering if possible. Line below is syntactically invalid, but shows the idea.
Name = (Myinstance.Name = "NewName")
編輯: 它是一個僞代碼和我忘了實際值傳遞給內部函數。我的錯。
我對此有點困惑。看起來二傳手完全忽略了你傳遞它的價值。一個使用'MyInstance.Name ='NewName''並將名稱設置爲''NewName-071839''的設置器我會理解,但這會讓我(即使在JavaScript或C#或允許使用它的其他語言中)也這樣。 – abarnert
那麼,它在語法上是有效的做'Name = Myinstance.Name =「NewName」',但是setter的返回值將被忽略,並且它將'Name'設置爲''NewName''。 – Aya
@Aya:好點。如果沒有括號,這將是一個鏈式賦值語句,意思是「將這個值賦給所有鏈接在一起的名字」。在非常簡單的情況下,它和C/JS /等一樣。 「將這個值賦給姓氏,然後將賦值的結果賦給它之前的那個......」,但是在這種情況下它並沒有幫助。 – abarnert