zoukankan      html  css  js  c++  java
  • 类名空间,类名查询顺序,组合

    1,面向对象

    • 类名空间:当pycharm在读到类名时,就会在内存开辟一个类名空间,类名空间里包括有关类体的东西(静态变量,方法(函数))的内存地址
    • 对象空间:当读到类名+()时就是类实例化的过程,即形成了对象,这时在内存另一个地方开辟一个新的空间,这个空间里存放的是构造方法(__init__里边的封装的属性)的内存地址

    • 1.1>创建一个类的时候就会创建一个类的名称空间,用来储存定义中的所有名字,这些名字称为类的属性,而类的属性有2种
      • 1.1.1>静态属性和动态属性
        • 静态属性就是直接在类中定义的变量
        • 动态变量就是定义在类中的方法
    • 1.2>查询的顺序:
      • 对象属性:先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找...
      • 类名属性:先从本类空间找,如果找不到,再从父类找...

    2,对象与对象之间是独立的

    • ***计算一个类 实例化多少对象***

    • 2.1>通过类名可以改变类中的静态变量
    class Count:
        count = 0
        def __init__(self):
            pass
    Count.count = 6
    print(Count.count)  # 此时静态变量中的count变为6
    • 2.2>但是同过对象只能查找类中的属性,不能更改.改变的只是实例化对象空间里的值,类名空间里的值并没有改变.
    class Count:
        count = 0
        
        def __init__(self):
            pass
        
    p = Count()
    p.count = 6
    p.name = "alex" 
    p.hobby = "打游戏"
    print(p.__dict__)  # 此时在实例化空间的count的实例化空间加了一个变量count=6
    print(Count.__dict__)  # 此时在类名空间里count还是0,并没有被改变   

    3,组合:给一个类的对象封装一个属性,这个属性是另一个类的对象.  

    class Person:  # 定义一个人物类
        def __init__(self, name, ad, hp):  # 构造人物的名字,攻击力,血量的方法
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def equipment(self, wea):  # 在人物里封装一个属性,这个属性放着 另一个类的对象
            # (另一个对象定义的属性(比如:名字,攻击力等)),wea在这是参数,其实是下边类的实例(对象)
            self.wea = wea
    
    
    class Arms:  # 定义另一个类
        def __init__(self, name, ad):  # 构造一个(name, ad)2个参数的方法
            self.name = name
            self.ad = ad
    
        def attack(self, p1, p2):  # 定义一个攻击的方法
            p2.hp = p2.hp - self.ad  # 这是取决于下边攻击掉血与还剩多少血量的关系来决定的
            print("%s用%s攻击%s,%s掉了%s血,还剩%s" % (p1.name, self.name, p2.name, p2.name, self.ad, p2.hp))
    
    p1 = Person("绝地小淫娃", 80, 300)  # 实例化人物对象1
    p2 = Person("南孚", 68, 380)  # 实例化人物对象2
    gun = Arms("m4a1", 110)  # 实例化武器对象1
    arrow = Arms("98k", 200)  # 实例化武器对象2
    crossbow = Arms("", 100)  # 实例化武器对象3
    p1.wea.attack(p1, p2)  # 人物1装备上武器1攻击(), 调用attack方法
    print(p2.hp)

     
  • 相关阅读:
    python九九乘法表
    js的规范写法ES5(自己以后按照这样写)
    git使用和理解之一(不含分支)
    Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)
    escape()、encodeURI()、encodeURIComponent()区别详解--zt
    webpack学习(一)
    width:100%以什么为基准的测试
    git status中文文件名编码问题解决
    系统构建基础
    jdk+Tomcat环境搭建
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9378725.html
Copyright © 2011-2022 走看看