首页 > 编程语言 >python基础33 继承、组合

python基础33 继承、组合

时间:2023-06-27 16:26:16浏览次数:72  
标签:__ course python 继承 class 33 pass self def

单继承下的查找循序

单继承的意思是一个类只继承一个类

class D():
    pass

class C(D):
    pass

class B(C):
    pass

class A(B):
    pass

如何查找继承下的属性和方法呢

class Foo():
    def __f1(self):  # _Foo__f1()
        print("Foo.f1")

    def f2(self):
        # obj:
        print("Foo.f2")
        self.__f1()  # self._Foo__f1()


class Bar(Foo):
    def __f1(self):    # _Bar__f1()
        print("Bar.f1")
obj = Bar()
obj.f2()  # obj.f2(obj)

单继承下的属性查找顺序:先从对象自己的名称空间中查找,然后去产生这个对象的类中查找,最后在去继承的父类中查找

多继承下的属性查找

一个类可以继承多个类

"""python支持多继承"""
class D():
    pass

class C(D):
    pass

class B(C, D):
    pass

class A(B,C,D):
    pass

多继承下的属性查找分为:菱形查找和非菱形查找

非菱形查找:

  菱形查找分:

经典类:按照深度优先查询

 新式类:按照广度优先查询

 在python3中都是新式类,所以,多继承下的属性查找,如果属性找不到,就按照广度优先查询

 一般情况下,最好不使用多继承

super关键字

 如果你继承的类中出现了super()关键字的用法,就要使用mro列表来查找属性

class A:
    def test(self):
        super().test()


class B:
    def test(self):
        print('from B')


class C(A, B):
    pass



a = A()
a.test()

print(c.mro)列表就是c属性的查找顺序

多态与多态性

多态:一种事物的多种状态

如何在父类里面强制限制子类中必须有speak功能

import abc # abstract 抽象的

这个类就变成了:抽象类

 抽象类的特点:只能被继承,不能被实例化!

抽象类中的方法都是抽象方法,而抽象方法不再实现具体的功能,而是用来限制子类的行为

class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod  # 抽象方法
    def speak(self):
         pass

    @abc.abstractmethod
     def jiao(self):
        pass


 class People(Animal):
    def speak(self):
         pass
     ...

 class Dog(Animal):
    def speak(self):
         pass

 obj = People()
 obj1 = Dog()
 obj.speak()
 obj1.speak()

组合

组合它不是一个新技术,就是之前我们学习的知识点

组合:就是一个对象拥有一个属性,该属性的值是另外一个对象

 

class Foo():
    def__init__(self,m):
        self.m=m
class Bar():
    def__init__(self,n):
        seif.n=n
obj=Foo(10)
obj1=Bar(20)
obj.x=obj1
print(obj.x.n)

继承一般用在什么是什么的时候
组合一般用在什么有什么的时候

class People():
    def __init__(self, name, age, gender):
        """这个是指名道姓的调用方法,不依赖于继承"""
        self.name = name
        self.age = age
        self.gender = gender
class Course():
    def __init__(self, course_name, course_price, course_period):
        """这个是指名道姓的调用方法,不依赖于继承"""
        self.course_name = course_name
        self.course_price = course_price
        self.course_period = course_period

python=Course("python", 10000, '6mon')
linux = Course("linux", 20000, '5mon
class Student(People):
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        """这个是指名道姓的调用方法,不依赖于继承"""
        super(Student, self).__init__( name, age, gender)
        self.courses = course
    def choose_course(self):
        pass
stu = Student('kevin', '19', 'male')
stu.courses.append(python)
stu.courses.append(linux)
print(stu.courses)

 

标签:__,course,python,继承,class,33,pass,self,def
From: https://www.cnblogs.com/shanghaipudong/p/17508945.html

相关文章

  • [SUCTF 2019]Pythonginx
    源码:@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")#获取urlhost=parse.urlparse(url).hostname#获取主机名例如:http://www.baidu.com/index.php?a=111会读取到www.baidu.com......
  • Python logging模块(转载)
    Pythonlogging模块日志级别CRITICAL=50#FATAL=CRITICALERROR=40WARNING=30#WARN=WARNINGINFO=20DEBUG=10NOTSET=0#不设置默认级别为warning,默认打印到终端importlogginglogging.debug('调试debug')logging.info('消息info')logging.warnin......
  • Python爬取用户所有博客
    CSDN的爬取比较简单,没有知乎那种反爬虫需要ip代理模拟登录那么麻烦。在确认一个用户之后,找到目录的url,再通过css选择器找到每一篇博客的url再分别保存为markdown格式。importrequestsimportparselimporttomdimportre先导入需要用到的包。第一次用到tomd,用于......
  • (Python编程)"添加Python,充分混和。"
    ProgrammingPython,3rdEdition翻译最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD23.1."AddPython.MixWell.Repeat."23.1."添加Python,充分混和。"Inthepriorchapter,weexploredhalfofthePython/Cintegration......
  • (Python编程)集成的方式
    ProgrammingPython,3rdEdition翻译最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD22.2.IntegrationModes22.2.集成的方式ThelasttwotechnicalchaptersofthisbookintroducePython'stoolsforinterfacingtotheoutsideworldanddiscussbothit......
  • Python:中文域名的编码处理
    中文域名通过https://whois.aliyun.com/domain/百度.中国域名信息查询(WHOIS)结果如下DomainName:百度.中国PunyName:xn--wxtr44c.xn--fiqs8s中文域名处理print('中国'.encode('punycode'))#b'fiqs8s'print('百度.中国'.encode('punycode'))......
  • 【AGC】云数据库云侧Python SDK集成使用方法
    使用场景云数据库服务端以前支持Node.JS和Java平台的ServerSDK。现在介绍一下服务端为Python平台时的使用方法。集成准备Python环境配置1.下载Python和PyCharm并安装。2.使用安装的python本身作为解释器。3.安装AGCPythonSDK。AGC环境配置1.在AGC创建项目和应用2.开通云数据库服......
  • python-docx - 3
    1.添加图片函数:add_picture(图片文件,width=宽,height=高)如果只指定一个宽或高,则按比例缩放。1.1文档直接添加图片fromdocximportDocumentfromdocx.sharedimportCmdoc=Document()doc.add_picture("images/2.jpg",width=Cm(8))doc.save("1.docx")1.2段落......
  • python批量安装第三方库
    把需要安装的库名和版本号(版本号可写)写入txt文件: 终端输入pip安装命令,等待安装完成即可:pipinstall-rrequirements.txt-i......
  • ubuntu搭建python3.10.7(服务器第一步)
    一安装python更新Ubuntu软件源和依赖(建议操作)1-sudoaptupdate2-sudoaptinstallbuild-essentialzlib1g-devlibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-dev3-下载安装包:wgethttps://www.python.org/ftp/python/3.10.7/Python-3.10.7......