首页 > 其他 > 详细

类名称空间、对象的名称空间、查询顺序

时间:2019-10-14 21:12:28      阅读:88      评论:0      收藏:0      [点我收藏+]

类名称空间与对象的名称空间

  类的名称空间

    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

 

    类有两种属性:静态属性和动态属性

 

    静态属性

      直接在类中定义的变量


    动态属性

      定义在类中的方法


    其中类的数据属性是共享给所有对象的

 

>>>id(egg.role)
4341594072
>>>id(Person.role)
4341594072

 

    而类的动态属性是绑定到所有对象的

 

>>>egg.attack
<bound method Person.attack of <__main__.Person object at 0x101285860>>
>>>Person.attack
<function Person.attack at 0x10127abf8> 

 

  创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

 

    在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

 

 

查询顺序


  # 对象.属性 :

    先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....
  # 类名.属性 :

    先从本类空间找,如果找不到,再从父类找....

 

  # 对象与对象之间是互相独立的.

 

  1. 计算一个类 实例化多少对象.

 

class Count:
    count = 0
    def __init__(self):
        Count.count = self.count + 1

obj1 = Count()
obj2 = Count()

print(Count.count)

 

 

  2.通过类名可以更改我的类中的静态变量值

 

Count.count = 6
print(Count.__dict__)

 

 

 

  3.但是通过对象不能改变只能引用类中的静态变量

 

 

 

obj1.count = 5
print(Count.__dict__)

 

类名称空间、对象的名称空间、查询顺序

原文:https://www.cnblogs.com/skydragon/p/11674091.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!