簡體   English   中英

如何在python中重新定義=?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM