day27 Pyhton 面向对象02 类和对象的命名空间

一.内容回顾

  类:具有相同属性和方法的一类事务

  # 描述一类事务轮廓的一个机制

    #商品/用户/店铺

  对象/实例: 对象(实例)就是类的实例化

    # 对象就是类的一个具体的表现

      #某一件特定的商品/某个人/某一家店

  实例化 : 类 --> 对象

  实例化的过程:

    #1.创建一个属于对象的空间

    #2.执行__init__,把这个空间传递给init的第一个参数

    #3.把这个空间地址作为返回值返回给对象变量

  #如何定义一个类

  #class Cls:pass

  #在类中直接可以定义的内容:

    #静态属性 : 这个类拥有的,所有的对象都共享的属性

    #动态属性: 方法定义在类中的函数,描述的是所有对象共享的行为

  #类名的作用

    #实例化的时候  对象 = 类名()

    # 操作静态属性

  #对象名的作用:

    #操作对象的属性

    #调用方法

二.今日内容

  #类的命名空间

    #类的代码的执行顺序

    #静态属性的意义,和他所在的位置

    #动态属性所存储的位置

  #对象的命名空间

    #如何建立起和类之间的关系

    #对象的属性是如何存储的

  #组合

    #常用的技能

# class A:
#     Country = 'China'
#     def talk(self):
#         print('%s is talking'%self.name)
# alex = A()


# 一个类可不可以没有__init__? 可以 # 在没有__init__的情况下,实例化经历了哪些步骤??? # 1.创建一个空间给对象 # 2.将这个空间的地址返回 # alex.name = 'alex' # alex.talk()
# class A:
#     Country = 'China'
#     def __init__(self,name):
#         self.name = name
#     def talk(self):
#         print('%s is talking'%self.name)
# 类中的代码是在什么时候执行的? 在实例化之前
# 新增静态属性
# A.静态属性名 = 'abc'
# print(A.静态属性名)
# 修改静态属性
# A.Country = '印度'
# print(A.Country)
# 删除静态属性
# del A.Country
# print(A.Country)   # 报错
# print(A.__dict__)  # 只能看,不能改也不能删
# 类的命名空间中有什么:
    # 静态属性
    # 动态属性(方法)

#
对象的命名空间和类的命名空间之间的关系 : # 对象和类之间有一个单向的联系,类对象指针 # 对象在使用某个名字的时候,如果在自己的空间中没有找到,就要到类的空间中去找

# 如果静态变量是一个不可变数据类型,那么只要对象修改这个数据,就相当于在对象的空间中新建
# 如果静态变量是一个可变数据类型,那么对象修改这个容器中的元素,相当于修改类的空间中的元素
# 如果静态变量是一个可变数据类型,那么对象直接对这个变量重新赋值,相当于修改对象自己空间中的元素

# 大结论
# 只要是静态变量,就用类名去修改,永远修改成功,并且所有的对象都共享这个改变
# 总结
# 对象的命名空间:类指针对象的所有属性
# 类的命名空间:方法和(静态属性字段)
# 对象在寻找名字的时候 : 先找对象自己内存空间中的,找不到就去类的命名空间中寻找
# 类中的名字是什么时候写入内存的 : 代码从上到下执行的时候就已经写入的.一定是在实例化之前
# 静态变量 : 尽量用类名去操作
原文地址:https://www.cnblogs.com/pythonz/p/9991301.html