zoukankan      html  css  js  c++  java
  • 面向对象 组合

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

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

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

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

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

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

      在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]

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

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

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/yuncong/p/9532075.html
Copyright © 2011-2022 走看看