=
:を使用すると、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]
=
:を使用すると、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]
=
Pythonで再定義することはできません。常に右側のオブジェクトを左側の名前にバインドします。
=
これは、オペレーターが通常データをターゲット変数にコピーすることを伴うC++などとはまったく異なることに注意してください。Pythonには、C++が持っている意味での変数はありません。Pythonには、オブジェクトにバインドできる名前があります。
再定義することはできませんが、再定義することはでき=
ます。
a[c] = b
or
a.c = b
__setitem__
それぞれ、またはを実装してこれを__setattr__
行います。属性については、を使用する方が適切な場合がよくありますが、用途property
が__setattr__
あります。
=
Pythonではオーバーライドできません。ドキュメントでオーバーライドできる特別なメソッドのリストを確認できますが、=
そのリストに一致するものはありません。
Pythonは常に、名前空間内の名前を値にバインドします。これは、Pythonには「変数への割り当て」がなく、「値へのバインド」のみがあることを意味します。コピーされるデータはなく、代わりに別の参照が同じ値に追加されます。
または多分あなたはこのようにすることができます:
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 )する必要があるのかわかりません。メタクラスを使うユニークな方法だと思います。
クラス内にいる場合は、オーバーライドできます。
例えば:
class A(object):
def __setattr__(self,name,value):
print 'setting', name, 'to', value
それで:
A().foo = 'bar'
出力します:
setting foo to bar
これは、プログラム全体ではなく、その1つのクラスのみを変更することに注意してください。