day17 名称空间、查询顺序

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

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

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

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法

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

>>>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,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

   

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

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

obj1 = Count()
obj2 = Count()

print(Count.count)
count = 0

def func():
    print(count)
func()

class Count:
    count = 0
    def __init__(self):
        pass
View Code


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

Count.count = 6
print(Count.__dict__)

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

obj1 = Count()
print(obj1.count)
obj1.count = 6

       

猜你喜欢

转载自www.cnblogs.com/zhuangdd/p/12466382.html
今日推荐