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]

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

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

  • 相关阅读:
    #Leetcode# 219. Contains Duplicate II
    #Leetcode# 203. Remove Linked List Elements
    #Leetcode# 141. Linked List Cycle
    #Leetcode# 128. Longest Consecutive Sequence
    linux——shell解释
    Linux——互联网搜索引擎nbtscan是一个扫描WINDOWS网络NetBIOS信息的小工具
    Linux——网络端口的状态netstat、ifconfig
    连不上网的原因
    jquery基础笔记
    网址收藏
  • 原文地址:https://www.cnblogs.com/yuncong/p/9532075.html
Copyright © 2011-2022 走看看