Day4-----模块、包、继承

一、模块、包

'''
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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小步调LLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值