如果大家学过java语言的话,那么一定对抽象类不陌生。同样作为面向对象的语言,Python也有抽象类。
如果说,类是对一堆对象共同内容的抽取,那么抽象类就是对一堆类共同内容的抽取,包括:属性和方法。
(1)抽象类必须包含一个或多个抽象方法,也可以包含普通方法。
(2)抽象类的抽象方法,在抽象类中并不作实现。
(3)抽象类不能被实例化。
# coding:utf-8
# 不是抽象类,是一个普通父类
class Parent(object):
# 构造方法
def __init__(self, sex, surname, job):
self.sex = sex
self.surname = surname
self.job = job
# 已经实现的普通方法
def run(self):
print("running...")
def say(self):
print("saying...")
def is_adult(self):
print("True")
# 未实现的普通方法
def hobby(self):
pass
# 子类
class Son(Parent):
# 重写
def is_adult(self):
print("False")
# 实例化
s = Son(sex="male", surname="Zhang", job="student")
s.is_adult()
s.hobby()
#coding:utf-8
# 从abc库中导入ABC, abstractmethod模块
from abc import ABC, abstractmethod
# 抽象父类
class Parent(ABC):
# 构造方法
def __init__(self, sex, surname, job):
self.sex = sex
self.surname = surname
self.job = job
# 已经实现的普通方法
def run(self):
print("running...")
def say(self):
print("saying...")
def is_adult(self):
print("True")
# 抽象方法
@abstractmethod
def hobby(self):
pass
# 子类
class Son(Parent):
# 重写
def is_adult(self):
print("False")
# 实例化
s = Son(sex="male", surname="Zhang", job="student")
s.is_adult()
s.hobby()
#coding:utf-8
# 从abc库中导入ABC, abstractmethod模块
from abc import ABC, abstractmethod
# 抽象父类
class Parent(ABC):
# 构造方法
def __init__(self, sex, surname, job):
self.sex = sex
self.surname = surname
self.job = job
# 已经实现的普通方法
def run(self):
print("running...")
def say(self):
print("saying...")
def is_adult(self):
print("True")
# 抽象方法
@abstractmethod
def hobby(self):
pass
# 子类
class Son(Parent):
# 重写
def is_adult(self):
print("False")
# 实现抽象父类的抽象方法
def hobby(self):
print("basketball")
# 实例化
s = Son(sex="male", surname="Zhang", job="student")
s.is_adult()
s.hobby()