首页 > 代码库 > Python基础day-18[面向对象:继承,组合,接口归一化]
Python基础day-18[面向对象:继承,组合,接口归一化]
继承:
在Python3中默认继承object类。但凡是继承了object类以及子类的类称为新式类(Python3中全是这个)。没有继承的称为经典类(在Python2中没有继承object以及他的子类都是经典类。)
继承是类与类的关系,解决了代码重用的问题,减少冗余代码。在Python中是先定义父类,然后在定义子类。最后使用 子类来实例化对象。
"继承是一种什么是什么的关系。例如:下面的s1是obj的子类。"
#父类的定义:
class obj: #定义一个obj类 pass class s1(obj): #定义s1类,括号内填上其父类,多个父类使用逗号隔开。 pass print(obj.__bases__) #查看其继承关系 print(s1.__bases__) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.py (<class ‘object‘>,) #默认继承object类 (<class ‘__main__.obj‘>,) #继承的 obj类 Process finished with exit code 0
当对象引用了一个属性,但是类中没有的话就会去类的父类中查询,没有在继续向上查询。
class obj: a = ‘abc‘ #父类中有一个变量 "a = ‘abc‘" class s1(obj): pass p1 = s1() #使用子类实例化一个对象 print(p1.a) #查看对象p1的属性a信息 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.py abc #显示的是父类的属性信息 Process finished with exit code 0
派生:
指子类除从父类继承的属性,自己独有的属性。
class obj_1: def __init__(self, name, age, sex): #父类中共有的属性 self.name = name self.age = age self.sex = sex class obj_2(obj_1): school = ‘Oldboy‘ #<------:这也是子类自己独有的 def __init__(self, name, age, sex, salary): obj_1.__init__(self, name, age, sex) #传值给父类 self.salary = salary #自己独有的属性 class stu(obj_1): job = ‘student‘ zhang = obj_2(‘zhang‘, 88, ‘nan‘, 5000) #实例化对象 wang = stu(‘wang‘, 55,‘nan‘) print(wang.name, wang.age, wang.job) print(zhang.name, zhang.age, zhang.sex, zhang.salary, zhang.school) 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-18/1.py wang 55 student zhang 88 nan 5000 Oldboy Process finished with exit code 0
组合:
"组合是一种 什么有什么的关系"
也是用于减少重复代码。
class obj_1: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class obj_2(obj_1): school = ‘Oldboy‘ def __init__(self, name, age, sex, salary,year,mon,day): obj_1.__init__(self, name, age, sex) self.salary = salary self.birth = Date(year,mon,day) #boj_1子类有个 Date <-----此处调用date类 class stu(obj_1): job = ‘student‘ class Date: #定义 Date类 def __init__(self,year,mon,day): self.year = year self.mon = mon self.day = day def tell_birth(self): print(‘%s%s%s‘%(self.year,self.mon,self.day)) zhang = obj_2(‘zhang‘, 88, ‘nan‘, 5000,1994,11,32) wang = stu(‘wang‘, 55,‘nan‘) print(wang.name, wang.age, wang.job) print(zhang.name, zhang.age, zhang.sex, zhang.salary, zhang.school,) zhang.birth.tell_birth() #查看信息 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-18/1.py wang 55 student zhang 88 nan 5000 Oldboy 19941132 #输出信息 Process finished with exit code 0
接口化归一设计:
限制子类一定要有父类的方法,子类实现的方法必须跟父类的方法名字一样。
import abc #导入abc模块 class obj(metaclass=abc.ABCMeta): #元类 @abc.abstractclassmethod @调用装饰器,限制子类的方法名 def read(self): pass @abc.abstractclassmethod def write(self): pass class s1(obj): def read(self): #子类的方法名必须跟父类一致,否则报错 print(‘is read‘) def write(self): print(‘is write‘) class s2(obj): def read(self): print(‘is read‘) def write(self): print(‘is write‘) p1=s1() p1.read() 执行结果: D:\Python\Python36-32\python.exe E:/Python/DAY-18/tmp.py is read Process finished with exit code 0
Python基础day-18[面向对象:继承,组合,接口归一化]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。