zoukankan      html  css  js  c++  java
  • Python对象

    Python对象

    2000年12月12日| 弗雷德里克伦德

    简介  

    重置你的大脑。

    对象  

    所有Python对象都有:

    • 唯一标识(由id(x)返回的整数
    • 一个类型(由类型(x)返回
    • 一些内容

    你无法改变身份。

    您无法更改类型。

    某些对象允许您更改其内容(不改变标识或类型)。

    某些对象不允许您更改其内容(更多信息如下)。

    该类型由一个类型对象表示,它更了解这种类型的对象(它们通常占用多少字节的内存,它们有什么方法等)。

    更新:在CPython 2.2及更高版本中,您可以在一些相当有限的情况下更改类型。)

    更多关于对象  

    对象也可能有:

    • 零个或多个方法(由类型对象提供)
    • 零个或多个名字

    某些对象具有允许您更改对象内容的方法(在适当的位置进行修改)。

    某些对象只有允许您访问内容的方法,而不是更改它。

    有些对象根本没有任何方法。

    即使他们有方法,你也永远不能改变类型,也不能改变身份。

    属性赋值和项目引用之类的东西只是语法糖(更多信息如下)。

    姓名  

    名称有点不同 - 它们不是对象的真正属性,对象本身不知道它的名称。

    一个对象可以有任意数量的名称,或者根本没有名称。

    名称存在于名称空间中(例如模块名称空间,实例名称空间,函数的本地名称空间)。

    命名空间是(名称,对象引​​用)对的集合(使用字典实现)。

    当您调用函数或方法时,其命名空间将使用您调用它的参数进行初始化(名称取自函数的参数列表,对象是您传入的对象)。

    作业  

    赋值语句修改名称空间,而不是对象。

    换一种说法,

    name = 10

    表示您将名称“name”添加到本地名称空间,并使其引用包含值10的整数对象。

    如果名称已存在,则分配将替换原始名称:

    name = 10 
    name = 20

    意味着您首先将名称“name”添加到本地名称空间,并使其引用包含值10的整数对象。然后,您将替换名称,使其指向包含值20的整数对象。原始的“10”对象不受此操作的影响,并且不关心。

    相反,如果您这样做:

    name = [] 
    name.append(1)

    您首先将名称“name”添加到本地名称空间,使其引用空列表对象。这会修改名称空间。然后,您在该对象上调用一个方法,告诉它将一个整数对象附加到自身。这会修改列表对象的内容,但它不会触及命名空间,也不会触及整数对象。

    name.attrname [index]这样的东西只是方法调用的语法糖。第一个对应于__setattr__ / __getattr__,第二个对应于 __setitem__ / __getitem __(取决于它们出现的赋值的哪一侧)。

    就这样。

    分享于:http://effbot.org/zone/python-objects.htm

    版权所有 ©2000 Fredrik Lundh

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/Xingtxx/p/11044208.html
Copyright © 2011-2022 走看看