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__or来做到这一点__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

我不知道您必须覆盖哪个内置函数(xxx)。我认为这是使用元类的独特方式。

于 2012-02-21T19:03:58.123 回答
0

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.

于 2012-02-16T20:16:58.687 回答