当我使用以下命令时,我想知道 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__
or来做到这一点__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
我不知道您必须覆盖哪个内置函数(xxx)。我认为这是使用元类的独特方式。
You can override it, if you are inside a class.
For example:
class A(object):
def __setattr__(self,name,value):
print 'setting', name, 'to', value
Then:
A().foo = 'bar'
Would output:
setting foo to bar
Keep in mind, this would only modify that one class, not your entire program.