当我使用=
:
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]
答案 0 :(得分:13)
您无法在Python中重新定义=
。它总是将右侧的对象绑定到左侧的名称。
请注意,这与例如C ++,=
运算符通常涉及将数据复制到目标变量。 Python没有C ++所具有的变量。 Python具有可以绑定到对象的名称。
答案 1 :(得分:7)
您无法重新定义=
,但可以重新定义:
a[c] = b
or
a.c = b
分别通过实施__setitem__
或__setattr__
来实现。对于属性,使用property
通常更合适,但__setattr__
有其用途。
答案 2 :(得分:5)
您无法在Python中覆盖=
。您可以在文档中看到可以覆盖的special methods列表,并且该列表中没有与=
匹配的内容。
Python总是将名称空间中的名称绑定到值。这意味着Python没有“赋值给变量”,它只有“绑定到值”:没有数据是副本,而是另一个引用被添加到相同的值。
答案 3 :(得分:0)
如果您在课堂内,可以覆盖它。
例如:
class A(object):
def __setattr__(self,name,value):
print 'setting', name, 'to', value
然后:
A().foo = 'bar'
输出:
setting foo to bar
请记住,这只会修改一个类,而不是整个程序。
答案 4 :(得分: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
我不知道你必须使用哪个内置函数( xxx )。 我认为这是使用元类的独特方式。