[英]How to redefine the = in python?
當我使用=
時,我想知道Python調用了什么:
a = b
我在哪里查找這些信息?
我會用my =“賦值給變量”
a會有類似的行為
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中重新定義=
。 它總是將右側的對象綁定到左側的名稱。
請注意,這與例如C ++完全不同,其中=
運算符通常涉及將數據復制到目標變量。 Python沒有C ++所具有的變量。 Python具有可綁定到對象的名稱。
您無法重新定義=
,但您可以重新定義:
a[c] = b
or
a.c = b
通過分別實現__setitem__
或__setattr__
完成此操作。 對於屬性,使用property
通常更合適,但__setattr__
有其用途。
你不能在Python中覆蓋=
。 您可以在文檔中看到可以覆蓋的特殊方法列表,並且該列表上沒有任何內容匹配=
。
Python總是將名稱空間中的名稱綁定到值。 這意味着Python沒有“賦值給變量”,它只有“綁定到值”:沒有數據是副本,而是另一個引用被添加到相同的值。
如果你在一個班級里,你可以覆蓋它。
例如:
class A(object):
def __setattr__(self,name,value):
print 'setting', name, 'to', value
然后:
A().foo = 'bar'
輸出:
setting foo to bar
請記住,這只會修改一個類,而不是整個程序。
或許你可以這樣做:
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
我不知道你必須使用哪個內置函數( xxx )。 我認為這是使用元類的獨特方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.