【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

 

转载于:https://www.cnblogs.com/frankruby/p/9562922.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值