目录
类的继承
继承多个父类
class ParentClass1:
pass
class ParentClass2:
pass
class SubClass(ParentClass1,ParentClass2):
pass
查看继承的父类
__bases__是类的属性,用来查找当前类的父类
继承的关系
- 对象是特征的与技能的结合体
- 类是一系列对象相同的特征和技能的结合体
- 继承是一系列类的相同特征和技能的结合体
--->先抽象再分继承
在继承背景下,对象属性的查找顺序
- 对象查找属性会先从对象的名称空间中查找
- 若对象没有,则会去类里面找
- 若当前类是子类,并且没有对象找的属性,会去父类查找
注意:对象查找属性,若子类有,不管父类有没有,以子类的为准
查看对象名称空间
__dict__
对象的属性,查看当前对象的类
__class__
查看类名称空间
__class__.__dict__
查看父类名称空间
__class__.__bases__[0].__dict__
派生
派生指的是子类 继承父类的属性,并且派生出新的属性
子类派生出新的属性,若与父类的属性相同,则以子类的为准
继承是类与类的关系,子类与父类是从属关系
子类派生出新的属性,并重用父类的属性
方式一:
直接通过父类(调用)__init__ 把 __init__ 当作普通函数使用,传入对象与继承的属性
class OldBoyPeople:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
class OldBoyPeople(OldBoyPeople):
def __init__(self,name,age,sex,level,sal):
OldBoyPeople.__init__(self,name,age,sex)
self.level = level
self.sal = sal
方式二
super是一个特殊的类。
在子类中调用super()会得到一个特殊的对象
通过“ . ” 指向的是父类的名称空间
class OldBoyPeople:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
class OldBoyStudent(OldBoyPeople):
def __init__(self,name,age,sex,course):
super().__init__(name,age,sex)
self.course = course
注意:两种方式不可混合使用,不易区分
新式类与经典类
在python2 中才会有新式类与经典类之分
在python3 中,所有的类都是新式类
新式类
继承object的类都称之为新式类
python3中,子类不继承自定义的类,默认继承object
class Foo(object):
pass
class Goo(Foo):
pass
print(Foo.__bases__)
print(Goo.__bases__)
经典类
在python2中,凡是没有继承object的类都是经典类
mro() 属于object------> type的函数,用来查看当前类的继承顺序
class A :
x =2
class B :
x = 3
class C(A,B) :
print('C...')
x = 1
#产看一下object类型为class
print(object)
#打印类的继承顺序
print(C.mro())
钻石继承
钻石继承可以称之为菱形继承
在多继承的情况下形成的钻石继承(继承顺序)
经典类
深度优先
新式类
广度优先
通过继承实现修改json模块数据类型
import json
from datetime import date,datetime
print(json,JSONEncoder)
print(datetime.today())
print(date.today())
# 开发者:直接str转成字符串
#开源者:修改json源代码
class MyJson(json.JSONEncoder):
def default(self,o):
if isinstance(o,datetime):
return o.strftime('%Y-%m-%d %X')
elif isinstance(o,date):
return o.strftime('%Y-%m-%d')
else:
return super().default(self,o)
dict1 = {
'name':'tank',
'today':datetime.today(),
'today2': date.today()
}
res = json.dumps(dict1,cls=MyJson)
print(res)