• 面向对象 组合


    回顾:类命名空间与对象,实例的命名空间

      类的属性:静态属性和动态属性(方法)

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

        动态属性(方法):就是定义在类中的方法(函数)

      注意:类的属性是共享给所以的对象的,而类的动态属性是绑定到所有对象的

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

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

    面向对象的组合用法

      软件重要的方式:组合  继承

      组合指的是,指一个类的对象作为另一个类对象的属性。使俩个类之间产生关系

     经典例题:

    # class Foo:
    #     count = 0
    #     def __init__(self):
    #         self.count += 1
    # f1 = Foo()
    # f2 = Foo()
    # print(Foo.count)  # 0    类的方法调用
    # print(f1.count)   # 1    对象f1对类方法调用    
    # print(f2.count)    #1     对象f2 对类方法的调用
    #这是俩个不同的对象所以,调用的结果都是为1
    例:请你写一个类,能够统计一共实例化了多少个对象?
    class Foo:
        count = 0
        def __init__(self):
            Foo.count += 1       #生成一个对象就会是将类(Foo)的属性+1
    f1 = Foo()    
    print(f1.count)    #1
    f2 = Foo()
    f3= Foo()
    print(f1.count)    #3
    print(f3.count)    #3

    当类中属性发生改变的时候,对象中没有同名的属性。方法的时候,对象使用的属性名会跟着类中的变量走

    class Foo:
        count = [0]
    f1 = Foo()
    f1.count[0]+= 1 
    print(f1.count[0])      #1
    print(Foo.count)        #[1]
    f1.count = [2]          #这部操作是给f1这个对象空间中增加属性。
    print(Foo.count)        #[1]

    只要对象的某个属性被直接赋值,那么一定是对象的命名空间发生了变化

    所以结论:只要是静态变量,就直接用类名进行操作

  • 相关阅读:
    例题三、简单的分支与循环结构
    第七章例题、心得及问题。
    第六章例题、心得及问题。
    第五章例题、心得及问题。
    第四章例题、心得及问题。
    第三章例题、心得及问题。
    第一章、第二章的心得及问题。
    实验3 分支结构。
    关于我最后一篇不是心得的 心得。
    关于第五章还没看完之后的 心得。
  • 原文地址:https://www.cnblogs.com/yuncong/p/9532075.html
Copyright © 2020-2023  润新知