本文已参加【新人创作礼】活动,一起开启掘金创作之路
今天是暑假在家自学的第九天
最近在家不太想学习,距离上次更新已经过去了三天了,这三天都没有好好学习,今天是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()
可以看到联想到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()
输出结果为:
今天最后的知识点类方法classmethod学的还不是太懂,明天起来首先复习一下再继续新的知识。
============================================================
昨天十一点写完网站bug没有发出去,今天早上补发。