Python中的对象

对象(Objects)

所有的python对象拥有这些要素:

  • 一个唯一的ID(一个整数,id(x))
  • 一个类型(type(x))
  • 一些内容

ID无法修改,类型无法修改。一些对象允许更改内容,一些对象不允许更改内容。

进一步介绍对象拥有的特性:

  • methods
  • names

一些对象拥有允许修改内容的method(修改并替换);一些对象仅有允许访问而不能修改内容的method;一些对象根本没有method。对于那些有method的对象,也不可以修改ID和类型。

一些看起来像attribute assignment和item references只是语法糖。

名字(Names)

名字并不是对象的性质,对象本身并不知道它叫什么。一个对象可以有任意的名字,或者干脆没有名字。

名字生存在命名空间(namespaces),如一个模块的命名空间,一个例子的命名空间或一个函数的局部命名空间。

当调用一个函数或method时,它的命名空间被所调用的参数初始化(名字被函数的参数表所取代,对象是传递的那些)

Assignment

Assignment修改了命名空间,而不是对象。

name = 10 意味着你给「name」命名到局部命名空间,令它代表含有值为10的整数对象。

如果这个名字已经形成了一个代表,assignment替换了原始的名字:

name = 10

name = 20

意味着替换了原来的名字,使它又指向了含有值为20的整数对象。原来的「10」没有受到这次操作的影响,它根本不在乎。

但与之相对的,如果你这么做:

name = [ ]

name.append(1)

首先命名「name」到局部命名空间,使它代表一个空的list对象,这算修改命名空间。接着在这个对象上调用了一个method,要求它自己附加一个整数对象,这算list对象内容的修改,但并没有接触命名空间,也没有接触整数对象。

name.attrname[index]只是调用method的语法糖。前者相当于__setattr__/__getattr__,后者相当于__setitem__/__getitem__

 

参考:Python Objects

留下评论