记录从准研一假期自学PYTHON的全过程day9

60 阅读2分钟

本文已参加【新人创作礼】活动,一起开启掘金创作之路

今天是暑假在家自学的第九天

最近在家不太想学习,距离上次更新已经过去了三天了,这三天都没有好好学习,今天是7月7日。从今天到7月15日准备再次认真学习7天,稳定更新7天。

上次学习到函数的单继承,这次开始学习多继承。

多继承

python中的多继承使用C3算法,先查找当前类中的方法,如果没有就按照从上到下继承的类依次查找。

举一个多继承的例子:

class A:
    def test(self):
        print("test a")

    def testa2(self):
        print("test a 2")


class B:
    def test(self):
        print("testb")

    def testb2(self):
        print("test b2")

class C(A,B):
    pass

c=C()

c.test()

image.png

可以看到联想到test的方法是A中的方法

多态(封装继承多态)

封装:根据职责将属性和方法封装到一个抽象类中

继承:实现代码的重用

多态:不同的子类对象调用相同的父类方法,产生不同的执行结果,不会影响到内部的设计。

多态的例子:

class Dog():
    def __init__(self, name):
        self.name = name

    def game(self):
        print("%s 跑 " % self.name)


class NBDog(Dog):
    def game(self):
        print("%s 飞" % self.name)


class Person:
    def __init__(self, name):
        self.name = name

    def game_with_dog(self, dog):
        print("%s 和 %s 在玩耍" % (self.name, dog.name))
        dog.game()


wangcai = NBDog("二哈")
xiaoming = Person("小明")
xiaoming.game_with_dog(wangcai)

在子类不重写__init__方法时,子类会默认调用父类中的__init__方法

子类也可以重写__init__方法,来给子类定义专属属性

实例

self为对象方法,属性称为对象属性 (最常用)

class A:  类对象
obj1=A() 实类对象

类属性和对象属性:

先访问对象属性在访问类属性(如果两个重名)

class Tool:
    count = 0  # 类属性

    def __init__(self, name):
        self.name = name
        Tool.count += 1 #对象属性


tool1 = Tool("1")
tool2 = Tool("2")
tool3 = Tool("3")
print("创建实例个数:%s" % Tool.count)

如果将对象属性该为固定数字,将会打印出对象属性的固定数字

def __init__(self, name):
    self.name = name
    Tool.count = 1

输出结果:

创建实例个数:1

类方法

*类属性就是针对类对象定义的属性。

*使用赋值语句在class关键字下方可以定义类属性

*类属性用于记录定义的方法

类方法针对类定义的方法,可以直接内部访问类属性或者调用其他类方法

定义方法: @classmethod def 类名(cls): pass

举例如下:

class Tool:
    count = 0  # 类方法

    def __init__(self, name):
        self.name = name
        Tool.count += 1

    @classmethod
    def test(cls):
        print("创建实例个数:%s" % cls.count)


tool1 = Tool("1")
tool2 = Tool("2")
tool3 = Tool("3")
print("创建实例个数:%s" % Tool.count)
tool1.count = 99
print(tool1.count)
tool1.test()

输出结果为:

image.png

今天最后的知识点类方法classmethod学的还不是太懂,明天起来首先复习一下再继续新的知识。

============================================================

昨天十一点写完网站bug没有发出去,今天早上补发。