zoukankan      html  css  js  c++  java
  • 第十六篇面向对象进阶二

    问题一

    1、下面的结果是什么?

    class A:
        def bar(self):
            print("bar")
            self.f1()
    class B(A):
        def f1(self):
            print("F1")
    class C:
        def f1(self):
            print("C")
    class D(C,B):
        pass
    d1 = D()
    d1.bar()
    

     要想弄清楚A中的self指代的是谁?

    下面执行流程

    由于D继承C和B,这里执行bar方法所以就去C和B中寻找,但是没有,之后去A中寻找,这时候的self指代的就是D的对象d1,

    就相当于执行d1.f1(),

    执行d1.f1(),当然要从基类的C中寻找,所以结果为C

    二、super方法执行基类的构造方法

    由于子类继承父类的时候,写构造方法的时候需要将父类的构造方法重新写一下,但是用了super方法就可以大大简化代码

    执行父类的构造方法有下面两种:

    super(当前类名,self).init()

    父类.__init__(self.xxx)

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 class Animal:
     4     def __init__(self):
     5         print("A的构造方法")
     6         self.py = "动物"
     7 class cat(Animal):
     8     def __init__(self):
     9         print ("B的构造方法")
    10         self.n = ""
    11         #继承父类的构造方法,下面的self指代的是cat这个对象
    12         super(cat,self).__init__()
    13         #Animal.__init__(self)  这个不推荐
    14 c = cat()

    三、查找源码的过程(要从底层开始找)

    import socketserver

    r = socketserver.ThreadingTCPServer()

    r.server_forver()

    下面是查找源码实例图

  • 相关阅读:
    ElasticSearch搜索引擎安装配置拼音插件pinyin
    ElasticSearch搜索引擎安装配置中文分词器IK插件
    Linux系统中ElasticSearch搜索引擎安装配置Head插件
    阿里云服务器Linux系统安装配置ElasticSearch搜索引擎
    盒子模型
    div与span的区别
    .与localhost与 .sqlexpress的区别
    C#-多态
    C#-里氏转换
    C#-继承
  • 原文地址:https://www.cnblogs.com/pyrene/p/6414686.html
Copyright © 2011-2022 走看看