一、模块、包
'''
Python中用关键字import来引入某个模块
调用math模块中的函数:模块名.函数名
from 模块名 import 函数名1,函数名2....
从模块中导入一个指定的部分到当前命名空间中
from modname import name1[, name2[, ... nameN]]
用as可以定义导入的模块名字
可以定义自己的模块
__all__变量:可以在每个代码文件中(模块)定义,类型为元组,列表
作用:影响from 模块名 import * 导入行为
如果定义__all__变量,只能导入变量中定义的内容
没有定义:模块所有功能都可以导入
模块搜索顺序:当前目录-->系统目录-->报错
包:功能相似或相近的模块放在一个目录,并在该目录定义一个__init__方法
import 包名.模块名(.函数名)
from 包名.模块名 import 功能名
from 包名.模块名 import *
'''
二、继承
1、基础知识
继承:描述类与类之间的所属关系
class 类B(类A) B继承A
B类的对象可以使用A的属性和方法
# 父类/基类
class Animal():
def play(self):
print('快乐的玩耍....')
# 子类/派生类
class Dog(Animal):
pass
dog=Dog()
dog.play()
2、继承分类
继承的分类:单继承:一个类只有一个父类
多继承:一个了=类有多个父类
多层继承:A继承B,B继承C
子类可以使用继承链的方法和属性
# 父类/基类
class Animal():
def play(self):
print('快乐的玩耍....')
# 子类/派生类
class Dog(Animal):
def bark(self):
print('汪汪叫。。')
class XTQ(Dog): #多层继承
pass
xtq=XTQ()
xtq.bark()
xtq.play()
3、子类重写父类方法
重写:子类定义和父类名字相同的方法
重写原因:父类中的方法不能满足子类对象的需求
重写后的方法:子类对象调用子类自己的方法,父类调用自己的方法
# 父类/基类
class Dog():
def bark(self):
print('汪汪叫。。。')
# 子类/派生类
class XTQ(Dog):
def bark(self):
print('嗷嗷嗷叫。。。。')
dog=Dog()
dog.bark()
xtq=XTQ()
xtq.bark()
4、子类调用父类中的重名方法
方法一:父类名.方法名(self,其他参数) self不能使用
通过实例对象.方法名()调用方法,不需要给self传递实参
方法二:super(当前类,self).方法名(参数)
方法三:方法二简写 super().方法名(参数)
# 父类/基类
class Dog():
def bark(self):
print('汪汪叫。。。')
# 子类/派生类
class XTQ(Dog):
def bark(self):
print('嗷嗷嗷叫。。。。')
def see_host(self):
print('看见主人了')
Dog.bark(self)
super(XTQ, self).bark()
super().bark()
xtq=XTQ()
xtq.bark()
xtq.see_host()
5、继承中的__init__()
子类__init__的形参一般先写父类的形参
# 父类/基类
class Dog():
def __init__(self,name):
self.name=name
self.age=0
def __str__(self):
return f'名字为{self.name},年龄为{self.age}'
def bark(self):
print('汪汪叫。。。')
# 子类/派生类
class XTQ(Dog):
def __init__(self,name,color):
super().__init__(name)
self.color=color
def __str__(self):
return f'名字为{self.name},年龄为{self.age},毛色为{self.color}'
def bark(self):
print('嗷嗷嗷叫。。。。')
def see_host(self):
print('看见主人了')
Dog.bark(self)
super(XTQ, self).bark()
super().bark()
xtq=XTQ('小黑','red')
print(xtq)
6、多继承
当子类调用两个父类中重名的方法时,子类对象调用的是第一个父类的方法
子类重写,指定想要的父类里重名方法:类名.__mro__可以查看当前的继承顺序链
# 父类/基类
class Dog():
def bark(self):
print('汪汪叫。。。')
def eat(self):
print('啃骨头。。。')
class God():
def play(self):
print('在云中飘溢会。。。')
def eat(self):
print('吃蟠桃仙丹。。。')
# 多继承
class XTQ(God,Dog):
def eat(self):
print('子类自己的方法')
# 方法一 类目.方法名(self,参数)
# Dog.eat(self)
# 方法二 继承顺序链的下一个类的
# super(XTQ, self).eat() # God
super(God, self).eat() #Dog
xtq=XTQ()
xtq.bark()
xtq.play()
print(XTQ.__mro__)
xtq.eat()