PY21 单继承多继承菱形继承

### 魔术方法

#__init__魔术方法(构造方法)
‘’’
触发时机:实例化对象,初始化的时候触发
功能:为对象添加成员
参数:参数不固定,至少一个self参数
返回值:无
‘’’

(1) 基本语法

class MyClass():
def init(self):
print(11)
self.name = “张婕”
print(22)

实例化对象

print(33)
obj = MyClass()
print(44)
print(obj.name)
print(55)

(2) 带有多个参数的构造方法

class MyClass():
def init(self,name):
# 对象.成员属性(自定义) = 参数值
self.name = name

实例化 (如果构造方法里面含有额外参数,在实例化时,需要传参)

obj = MyClass(“刘敏”)
print(obj.name)

(3) 类可以是1个,对象可以是多个,可以通过一个类实例化多个不同的对象

“”“没创建一个对象,都会单独占用一个空间,创建的越多,占用的空间就越大”""
class Children():
def init(self,name,skin):
self.name = name
self.skin = skin

def cry(self):
	print("小孩下生直接哭~")

def drink(self):
	print("小孩下生直接吸奶奶~")

def __eat(self):
	print("小孩自己吃自己的手指")
	
def pub_func(self):
	print("该对象的名字是{},该对象的肤色是{}".format(self.name,self.skin))

# 注意点
def pub_func2(self,name,skin):
	print("该对象的名字是{},该对象的肤色是{}".format(name,skin))

创建第一个对象

afanda = Children(“王铁锤”,“蓝色”)
afanda.cry()
afanda.pub_func()

创建第二个对象

dan = Children(“王钢蛋”,“黑色”)
dan.drink()
dan.pub_func()

创建第三个对象

bao = Children(“王宝强”,“绿色”)
bao.pub_func()

注意点:

bao.pub_func2(“尉翼麟”,“白色”)

###继承: 一个类除了自身所拥有的的属性方法之外,还获取了另一个类的成员属性和方法

“”"
一个类继承另外一个类,那么该类就是子类(衍生类),被继承的这个叫做父类(基类,超类)
继承:
(1)单继承 (2)多继承
python所有的类都默认继承父类 object
“”"
“”"

###单继承

class Human(object):
hair = “金色”
sex = “男”

def eat (self):
	print("人天生就爱吃")
def la (self):
	print("吃完就得拉")
def __fuck(self):
	print("人天生就得啪啪啪")

#(1)子父继承之后,子类可以调用父类的所有共有成员
class Man(Human): #class Man(父类)
pass
obj = Man()#Man(构造方法的参数)
print(obj.hair)
#(2)子父继承之后,子类不可以调用父类的私有成员
#(3)子父继承之后,子类可以重写父类的同名方法
“”"
“”"
子父继承之后
如果子类里面有该成员的属性方法,优先调用自己的
如果没有该成员,name调用父类的公有成员
如果都没有,直接报错:
“”"
“”"
class Children(Human):
sex = “女性”
def eat(self):
print(“小孩只能吃奶”)
obj = Children()
print(obj.sex)
obj.eat()
“”"

###多继承

#(1)基本语法
“”"
class Father():
property = “胡子拉碴”
def f_hobby(self):
print(“吃喝嫖赌抽”)
class Mother():
property = “风韵犹存”
def m_hobby(self):
print(“坑蒙拐骗偷”)
class Girl(Mother,Father):
pass
#实例化对象
obj = Girl()
print(obj.property)
obj.m_hobby()
obj.f_hobby()
“”"

(2)super用法

“”"
(1)super本身是一个类 super()是一个对象 用于调用父类的绑定方法
(2)super()只应用在绑定方法中,默认自动传递self对象(前提super所在作用域存在self)
(3)super用途:解决复杂的多继承调用顺序
“”"
print("<_____>")
class Father():
property = “胡子拉碴”
def f_hobby(self):
print(“吃喝嫖赌抽”)
class Mother():
property = “风韵犹存”
def m_hobby(self):
print(“坑蒙拐骗偷”)
class Son(Mother,Father):
property = “吃睡觉打游戏”

#1.利用类来调用父类的成员
def res1(self):
	print(Mother.property)
	Father.f_hobby(self)
#2.利用类调用父类的属性和方法
"""self在调用父类成员的时候,如果本类里有,先调用自己的,没有,在调用父类的"""

def res2(self):
	self.m_hobby()
	print(self.property)

	
# 3.利用super调用父类的属性和方法
"""
	super()只调用父类的相关公有成员,不会调用自己本类中成员,父类也没有的话,直接报错.
	super() 特指只调用父类, 和 self不同.
"""
def res3(self):
	print(super())
	print(super().property)
	super().m_hobby()	

obj = Son()
obj.res3()
“”"
<super: <class ‘Son’>, >
风韵犹存
坑蒙拐骗偷
“”"

###菱形继承

“”"
Human
Man Woman
Children
“”"
class BigMan():
pass
class Humen():
pty = 4
def feelT(self):
print(“原始人类天热的时候,后羿射日1”)
print(self.pty) #1
print(“冷的时候,女娲补天2”)
class Man(Humen):
pty = 3
def feelT(self):
#self刺客接收的是children的对象
print(“热 吹吹空调3”)
super().feelT()
print(“冷 吃雪糕4”)
class Women(Humen):
pty = 2
def feelT(self):
#self刺客接收的是children的对象
print(“re,穿吊带5”)
super().feelT()
print(“冷 穿打底裤6”)
class Children(Man,Women):
pty = 1
def feelT(self):
print(“热 洗澡7”)
super().feelT()
#super调用方法时会携带者当前类的对象进行传递
print(“冷 进被窝8”)
obj = Children()
obj.feelT() #73512648

mro 列表: super

“”"
类.mro()返回的是方法调用顺序的列表,针对的是多继承下的同名方法,按照列表的顺序依次调用

“”"
lst = Children.mro()
print(lst)
#[<class ‘main.Children’>, <class ‘main.Man’>, <class ‘main.Women’>, <class ‘main.Humen’>, <class ‘object’>]

issubclass 判断是否存在子父关系 (语法使用与isinstance的使用一模一样)

“”“只要在一个继承链上即可(有血缘关系即可),应用范围在类的身上”""
res = issubclass(Children,Man)
res = issubclass(Children,Women)
res = issubclass(Children,Humen)
res = issubclass(Children,BigMan)
res = issubclass(Children , (Man,Women,Humen,BigMan))
print(res)

in 判断在或者不在 , 在=> True 不在=>False

res = “feelT” in Children.dict # 10遍
print(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值