我想知道的Python調用時,我用的是=
:如何在python中重新定義=?
a = b
哪裏找這些資料?
我將有「賦值給變量」與我=
一會也有類似的行爲
l=list()
l.append(1)
l.append(2)
l.append(3)
l1=l
l1[2] = ’B’
print(l1)
[1, 2, ’B’]
print(l)
[1, 2, 3]
我想知道的Python調用時,我用的是=
:如何在python中重新定義=?
a = b
哪裏找這些資料?
我將有「賦值給變量」與我=
一會也有類似的行爲
l=list()
l.append(1)
l.append(2)
l.append(3)
l1=l
l1[2] = ’B’
print(l1)
[1, 2, ’B’]
print(l)
[1, 2, 3]
或者你可以這樣做:
def funct(obj):
import copy
print('entro')
return str(copy.deepcopy(obj))
class metacl(type):
def __new__(meta,classname,supers,classdict):
classdict['__xxx__'] = funct
return type.__new__(meta,classname,supers,classdict)
class list(list,metaclass=metacl): pass
我不知道是哪個內置功能,您必須ovverride(XXX)。 我認爲這是使用元類的獨特方式。
你不能在Python重新定義=
。它將始終將右側的對象綁定到左側的名稱。
請注意,這與例如C++,其中=
運算符通常涉及將數據複製到目標變量。 Python在C++中沒有變量。 Python具有可以綁定到對象的名稱。
+1:我們有驚人的相似的答案:-) – 2012-02-16 20:10:10
我會改變=的行爲。我想嘗試模擬C++如何使用C++ – fege 2012-02-16 20:22:08
然後使用C++。 – 2012-02-16 20:24:21
你不能在Python中覆蓋=
。您可以看到您可以在文檔中覆蓋的special methods列表,並且該列表中沒有任何與=
匹配的列表。
Python始終將名稱空間中的名稱綁定到值。這意味着Python沒有「賦值給變量」,它只有「綁定到值」:沒有數據是副本,而是將另一個引用添加到相同的值。
你不能重新定義=
,但你可以重新定義:
a[c] = b
or
a.c = b
分別實現__setitem__
或__setattr__
,執行此操作。對於屬性,使用property
通常更合適,但__setattr__
有其用處。
爲什麼你想重新定義賦值操作?這只是要求麻煩。 – 2012-02-16 20:08:00
這是你可以不厭其煩地吼叫「那不是* PYTHONIC !!! *」的時代之一嗎?**不管「pythonic」是什麼意思? – BoltClock 2012-02-16 20:08:31
嚴重的問題:你會用它做什麼? – AndiDog 2012-02-16 20:16:27