3

=:を使用すると、Pythonが何を呼び出すかを知りたいです。

a = b

この情報はどこで検索できますか?

私の=で「変数への割り当て」があります

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]
4

5 に答える 5

13

=Pythonで再定義することはできません。常に右側のオブジェクトを左側の名前にバインドします。

=これは、オペレーターが通常データをターゲット変数にコピーすることを伴うC++などとはまったく異なることに注意してください。Pythonには、C++が持っている意味での変数はありません。Pythonには、オブジェクトにバインドできる名前があります。

于 2012-02-16T20:08:27.310 に答える
8

再定義することはできませんが、再定義することはでき=ます。

a[c] = b
   or
a.c  = b

__setitem__それぞれ、またはを実装してこれを__setattr__行います。属性については、を使用する方が適切な場合がよくありますが、用途property__setattr__あります。

于 2012-02-16T20:17:32.683 に答える
5

=Pythonではオーバーライドできません。ドキュメントでオーバーライドできる特別なメソッドのリストを確認できますが、=そのリストに一致するものはありません。

Pythonは常に、名前空間内の名前を値にバインドします。これは、Pythonには「変数への割り当て」がなく、「値へのバインド」のみがあることを意味します。コピーされるデータはなく、代わりに別の参照が同じ値に追加されます。

于 2012-02-16T20:09:44.670 に答える
0

または多分あなたはこのようにすることができます:

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 )する必要があるのか​​わかりません。メタクラスを使うユニークな方法だと思います。

于 2012-02-21T19:03:58.123 に答える
0

クラス内にいる場合は、オーバーライドできます。

例えば:

class A(object):
    def __setattr__(self,name,value):
        print 'setting', name, 'to', value

それで:

A().foo = 'bar'

出力します:

setting foo to bar

これは、プログラム全体ではなく、その1つのクラスのみを変更することに注意してください。

于 2012-02-16T20:16:58.687 に答える