Python3 类和对象:拾遗

1、组合

1、方法:在一个新的类定义中把需要的类放进去实例化就可以了

例子:

// 乌龟类
class Turtle:
    def __init__(self, x):
        self.num = x
// 鱼类
class Fish:
    def __init__(self, x):
        self.num = x
// 水池类
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()

 

2、什么时候用组合什么时候用继承

当类与类相似时可以用一个新的类继承以有的的类(并列关系)

当需要一个新的类时包含已有的类时需要用到组合,就像池塘鱼乌龟的关系(自己的理解,有问题请指出)

2、类对象的产生

当一个类定义完成后,类定义就变成了类对象。类对象时可以用类名直接表示的对象,它有两种操作,直接类属性的操作和实例化。对于类属性的使用可以直接使用“类名.属性”的方法,而对类方法的使用则需要实例化一个对象才能使用,即需要传入一个self参数才能使用

举例

class C:#新建一个C类
    t=0#类属性
    def x(self):#类方法
        print('Xman')


>>> C.t#使用类名(类对象)可以直接调用类属性
0
#但是使用类对象调用方法则会报错因为缺少self参数,所以需要实例化后才能调用类方法
>>> C.x()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    C.x()
TypeError: x() missing 1 required positional argument: 'self'

#实例化后调用类方法
>>> a=C()
>>> a.x()
Xman

3、对象的属性名和方法应该不同名,如果同名属性会覆盖方法

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#20>", line 1, in <module>
    c.x()
TypeError: 'int' object is not callable

例题:

定义一个类对象跟中该类有多少个实例被创建

class C:
    count=0
    def __init__(self):
        self.count+=1#self可以改为C
    def __del__(self):
        self.count-=1#self可以改为C


>>> a=C()
>>> a.count
1
>>> del a
>>> C.count
0

 

posted @ 2018-02-06 21:07  消灭猕猴桃  阅读(234)  评论(0编辑  收藏  举报