类定义

类是用来创建用户定义对象的模板,是抽象的对象(类对象)。例如我们说鱼类,指的就是一类抽象的对象,而具体到武昌鱼,鲈鱼,鲫鱼…… 就是具体的对象。

定义了一个类,就可以用这个模块来创建它的具体对象(实例)。类定义的详细语法规则见 class 定义类

创建一个类,需要继承另一个类。新创建的类是子类,继承的类是基类。如不指定,创建类默认继承自所有类的基类 object。

下面是一个没有任何自定义属性的简单类:

class A:
    pass

A
__main__.A
type(A)
type
A.__bases__ # 查看基类
(object,)

继承一个指定的类,可以对它进行定制化开发。需要注意参数 self, 它是约定名称(可自定义但不推荐),它就代表类创建的实例对象自身。

例如创建一个自定义的列表类,增加 add() 方法:

class Mylist(list):
    def add(self,value):
        self.append(value)
        
lst = Mylist('123') # 创建实例赋值给 lst
lst.add(4) # lst 调用 add 方法,self 参数就是 lst
lst
['1', '2', '3', 4]

或者自定义一个字典,当访问的键不存在时,不报错,而是返回 None(__missing__() 是用来定义字典子类时找不到键如何处理的魔法方法):

class Mydict(dict):
    def __missing__(self, key):
        return 

d = Mydict(a=1,b=2)
d, d['c']
({'a': 1, 'b': 2}, None)

我们也可以自定义任意的类,其中 __init__() 方法是创建实例时用来初始化实例对象的魔法方法,可以用它来增加一些自定义属性。没有该方法,创建实例时,将自动调用基类的该方法完成初始化。

例如定义一个 “人” 类:

class Person:
    '这是人类'
    # 定义人的属性
    def __init__(self, name):
        self.name = name
        self.ears = '耳朵'
        self.brain = '大脑'
        self.hands = '双手'
    
    # 人有生活
    def live(self):
        print(f'{self.name}{self.ears}'
              '听着音乐,'
              '享受美好生活。')
        
    # 还有工作
    def work(self):
        print(f'{self.name}{self.brain}和'
              f'{self.hands}'
               '勤劳致富。')
        
# 造人
xm = Person('小明')
xz = Person('小张')
xm.live() # 小明在享受生活
xz.work() # 小张在努力工作
小明用耳朵听着音乐,享受美好生活。
小张用大脑和双手勤劳致富。