首页 > 其他 > 详细

接口继承与归一化设计

时间:2021-04-17 22:55:50      阅读:37      评论:0      收藏:0      [点我收藏+]
‘‘‘
什么时候用继承:
1、当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
例如:描述一个机器人类,机器人这个大类是由很多互不相关的小类组成,如机械胳膊类、腿类、身体类、电池类
2、当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好
例如:猫可以---喵喵叫、吃、喝、拉、撒;狗可以---汪汪叫、吃、喝、拉、撒;如果我们要分别为猫和狗创建一个类,那么就需要为猫和狗实现他们所有的功能,我们可以创建一个动物类,然后让他们继承动物类即可

继承有两个概念,一个叫继承,一个叫派生(衍生):
继承描述了子类属性从祖先类继承这样一种方式;
派生描述了子类衍生出新的特性,新类保留已存类类型中所有需要的数据和行为,但允许修改或者其它的自定义操作,都不会修改原类的定义。
‘‘‘

# 继承的实现
class Animal:
‘‘‘定义一个动物类,包含相同功能吃喝拉撒‘‘‘
def eat(self):
print(‘%s吃‘ % self.name)

def drink(self):
print(‘%s喝‘ % self.name)

def shit(self):
print(‘%s拉‘ % self.name)

def pee(self):
print(‘%s撒‘ % self.name)


# 在猫或狗的类里面,也可以重新定义吃喝拉撒的方法,__init__和cry其实都是派生(衍生)
class Cat(Animal):
‘‘‘定义一个猫的类,猫的叫声是独特的喵喵喵‘‘‘
def __init__(self, name):
self.name = name
self.breed = ‘猫‘

def cry(self):
print(‘喵喵叫‘)


class Dog(Animal):
‘‘‘定义一个狗的类,狗的叫声是独特的汪汪汪‘‘‘
def __init__(self, name):
self.name = name
self.breed = ‘狗‘

def cry(self):
print(‘汪汪叫‘)

c1 = Cat(‘大黑猫‘)
print(c1.__dict__) # {‘name‘: ‘大黑猫‘, ‘breed‘: ‘猫‘}
c1.cry()
c1.eat()

d1 = Dog(‘大狼狗‘)
print(d1.__dict__) # {‘name‘: ‘大狼狗‘, ‘breed‘: ‘狗‘}
d1.cry()
d1.drink()


‘‘‘
继承同时有两种含义:
1、继承基类的方法,并且做出自己的改变或者扩展(代码重用)
2、声明某个子类兼容于某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法(接口继承实现需要导入abc模块)
继承的第二种含义非常重要,它又叫‘接口继承’;接口就叫一个函数,接口继承实质上是要求‘做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象’---这在程序设计上,叫做归一化
‘‘‘

import abc # 第一步导入abc模块

class All_file(metaclass=abc.ABCMeta): # 第二步metaclass=abc.ABCMeta
‘‘‘一个接口类‘‘‘
@abc.abstractmethod # 第三步@abc.abstractmethod
def read(self):
pass

@abc.abstractmethod
def write(self):
pass

class Disk(All_file):
‘‘‘继承接口类的子类‘‘‘
def read(self):
print(‘disk read‘)

def write(self):
print(‘disk write‘)


class Cdrom(All_file):
‘‘‘继承接口类的子类‘‘‘
def read(self):
print(‘cdrom read‘)

def write(self):
print(‘cdrom write‘)


class Mem(All_file):
‘‘‘未完全继承接口类的子类‘‘‘
def read(self):
print(‘mem read‘)

m1 = Mem() # 接口继承定义完后,Mem子类没有完全做到接口继承,因为有一个write方法没写,所以此时的实例化无法成功,会报错
# TypeError: Can‘t instantiate abstract class Mem with abstract methods write

接口继承与归一化设计

原文:https://www.cnblogs.com/xuewei95/p/14672117.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!