zoukankan      html  css  js  c++  java
  • 【python39--面向对象组合】

    一、组合

    定义:当几个对象是水平方向的时候,就应该考虑组合,当对象是纵向的时候用继承,组合就是用一个类把2个平级层次的类放在一起,然后实例化就可以了

    #现在定义一个类,叫水池,水池里面有鱼和乌龟
    class
    Turtle: def __init__(self,x): self.num = x class Fish: def __init__(self,y): self.num = y class Pool: def __init__(self,x,y): self.turtle = Turtle(x) self.fish = Fish(y) def print_num(self): print('共有%d只乌龟%d条鱼'%(self.turtle.num,self.fish.num)) >>> pool = Pool(1,10) >>> pool.print_num() 共有1只乌龟10条鱼 >>>

    二、什么时候用组合,什么时候用继承

    简单的说,组合用于“有一个”的场景,继承用于“是一个”的场景中。例如:水池有一只乌龟,水池有一条鱼,这样的就适合组合;女人是人,鲨鱼是鱼,这样的适合继承

    三、类对象什么时候产生

    类对象产生于类定义之后,类定义就变成了类对象,可以直接通过“类名.属性”,“类名.方法名()”引用或使用相关的属性或方法

    四、如果对象的属性和方法名字相同,会怎样?

    属性会覆盖方法

    >>> class C:
        def x(self):
            print('Xman')
    
            
    >>> c = C()
    >>> c.x()
    Xman
    >>> c.x = 1
    >>> c.x
    1
    >>> c.x()
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        c.x()
    TypeError: 'int' object is not callable

    五、python严格要求方法需要有实例化才能被调用

    >>> class BB:
        def printB():
            print('no zuo no die')
    
            
    >>> bb = BB()
    >>> bb.printBB()
    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        bb.printBB()
    AttributeError: 'BB' object has no attribute 'printBB'
    
    ----printBB()方法没有被实例化,所以调用失败
    >>> class BB:
        def printBB(self):
            print('no zuo no die')
    
            
    >>> bb = BB()
    >>> bb.printBB()
    no zuo no die
    >>> 
    ----方法只有被实例化,才能被调

    六、在一个类中定义一个变量,用于跟踪该类有多少个实例被创建(当实例化一个对象,这个变量加1,当销毁一个变量,这个变量就自动减1 )

    >>> class C:
        count = 0
        def __init__(self):
            C.count +=1
        def __del__(self):
            C.count -=1
    
            
    >>> a = C()
    >>> b =C()
    >>> c =C()
    >>> C.count
    3
    
    >>> del a
    >>> C.count
    2
    
    >>> del b,c
    >>> C.count
    0
  • 相关阅读:
    Gridview linkbutton click
    Linux Bluetooth编程 HCI层编程
    Google Android 开发工程师职位面试题
    Android下文件操作模式(含SDCard的读写)
    Android中悬浮窗口的实现原理和示例代码
    Android.mk的用法和基础
    Android.mk的用法和基础
    Linux Bluetooth编程 HCI层编程
    Android下文件操作模式(含SDCard的读写)
    init.rc 脚本语法学习
  • 原文地址:https://www.cnblogs.com/frankruby/p/9562922.html
Copyright © 2011-2022 走看看