秃顶之路-Day21

Day 21

# ### 继承 -> 单继承
'''
如果一个类继承另外一个类
该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)
继承:(1)单继承(2)多继承
python中,所有的类都默认继承父类object
'''
class Human(object):
	hair='黑色'
	sex='男'
	def cry(self):
		print('人类在伤心的时候,会留下鳄鱼的眼泪')
	def eat(self):
		print('人类在远古的时候,抓住猎物直接吃')
	def __makebaby(self):
		print('人类在发育到成熟的时候,会造人')
# (1)子父继承之后,子类可以调用父亲的公有成员
class Man(Human):
	pass
obj=Man()
print(obj.hair)
obj.cry()
# (2)子父继承之后,子类不能调用父类的私有成员
# class Women(Human):
# 	def pub_func(self):
# 		self.__makebady()
# obj.women()
# (3)子父继承之后,子类可以改写父类中的方法
'''
子父继承之后,
如果子类里面有该成员属性和方法,优先调用自己的
如果没有该成员,调用父类中的成员
如果都没有,直接报错
'''
class Children(Human):
	sex='女性'
	def cry(self):
		print('小孩只会哇哇哇的哭')
obj=Children()
obj.cry()
print(obj.__dict__)
print(Children.__dict__)

# ### 多继承
# (1) 基本语法
class Father():
	property='风流倜傥,一表人才'
	def f_hobby(self):
		print('社会摇,大保健')
class Mother():
	property='成语落雁,闭月羞花'
	def m_hobby(self):
		print('喝酒抽烟烫头')
class Daughter(Father,Mother):
	pass
# 实例化对象
obj=Daughter()
print(obj.property)
obj.m_hobby()
# (2)super用法
'''
super本身就是一个类,super()是一个对象,用于调用父类的绑定方法
super()只应用在绑定方法中,默认自动传递self对象(前提:super所在的作用域存在self)
super用途解决繁杂的多继承调用顺序
'''
class Father():
	property='风流倜傥,一表人才'
	def f_hobby():
		print('社会摇')
class Mother():
	property='闭月羞花'
	def m_hoddy(self):
		print('打麻将')
class son(Father,Mother):
	property='王者荣耀'
	# 1.利用类来调用父类的成员
	def skill1(self):
		Father.f_hobby()
		print(Mother.property)
	# 2.利用对象调用父类的成员
	def skill3(self):
		self.m_hoddy()
		print(self.property)
	# 3.利用super调用父类的属性和方法
	'''
	super()只调用父类的相关公有成员,不会调用自己的本类成员,父类没有直接报错
	super()在调用父类方法时,只调用父类的绑定方法,默认传递参数是本类的对象self
	'''
	def skill3(self):
		# print(super())
	print(super().property)
	super().m_hobby()
	# super().f_hobby() error
obj=Son()
obj.skill1()
obj.skill2()
obj,skill3()
'''
self 和 super() 的区别
self
在调用成员时,先看看自己的类对象中是否存在该成员,
如果有调用自己的,如果没有,调用父类的,如果都没有直接报错
super()
在调用成员时,只调用父类的相关成员(属性,绑定方法)
永远不会调用自己的。如果父类没有,直接报错
'''
# ### 菱形继承
'''
	Human
Man		 Women
	Children
'''
class OldWomen():
	pass
class Human():
	pty=4
	def feelT(self):
		print('原始人类如果热了,脱皮1')
		print(self.pty)
		print('原始人类如果冷了,扒别人的皮2')
class Man(Human):
	pty=3
	def feelT(self):
		print('现代男人如果热了,脱衣服,脱了裤子3')
		super().feelT()
		print('现代男人如果冷了,脱别人的衣服,脱别人的裤子4')
class Women(Human):
	pty=2
	def feelT(self):
		print('现代女人如果热了,吹空调5')
		super().feelT()
		print('现代女人如果冷了,喝热水6')
class Children(Man,Women):
	# pty=1
	def feelT(self):
		print('现代小孩如果热了,就会哭7')
		super().feelT()
		print('现代小孩如果冷了,也要哭8')
obj.Children()
obj.feelT()
# 73512648
# mro 列表
# super用途的一个体现,解决复杂的多继承调用顺序关系
'''
类.mro()
返回来的是方法调用顺序列表,针对于多继承下的同名方法
按照顺序依次的进行调用
'''
lst=Children.mro()
print(lst)
# issubclass 判断父子关系(应用在类当中,判断父子关系)
'''只要在一条继承链上即可(有血缘关系)'''
res=issubclass(Children,Man)
print(res)
res=issubclass(Children,Women)
print(res)
res=issubclass(Children,Human)
print(res)
res=issubclass(Children,(Human,Women,Man,OldWomen))
print(res)
res=issubclass(Children,OldWomen)
print(res)
# isinstance(应用在对象和类之间,判断类型)
'''只要在一条继承链上即可(有血缘关系)'''
res=isinstance(obj,Children)
print(res)
res=isinstance(obj,Human)
print(res)
res=isinstance(obj,(Human,Children,Women))
print(res)
res=isinstance(obj,OldWomen)
print(res)
# ### 魔术方法(特定时机,自动触发)
# __init__魔术方法(构造方法)
'''
触发时机:实例化对象,初始化的时候触发
功能:为对象添加成员
参数:参数不固定,至少一个self参数
返回值:无
'''
# (1)基本语法
class MyClass():
	def __init__(self):
		print('初始化的时候的触发')
		# 为当前对象self添加成员name
		self.name='bajie'
# 实例化对象
obj.MyClass()
print(obj.name)
# (2)带有多个参数的构造方法
class MyClass():
	def __init__(self,name):
		# self.成员名=参数
		self.name=name
# 实例化对象
obj=MyClass('bajie')
#在实例化对象的时候,给构造方法传递参数
print('obj.name')
print(obj.name)
# (3)类可以是一个,对象可以是多个
'''
一个类可以实例化多个不同的对象,而对象和对象之间彼此独立
但都可以使用类中的公有的成员
'''
class Children():
	def __init__(self,name,skin):
		self.name=name
		self.skin=skin
	def cry(self):
		print('小孩出生就哇啊啊哇哇哇的哭')
	def drink(self):
		print('小孩出生就要喝奶奶')
	def __la(self):
		print('拉粑粑')
	def pub_info(self):
		print('该对象的名字是{},该对象的肤色是{}'.format(self.name,self.skin))
# 创建第一个小孩
afanda=Children('阿凡达','蓝色的')
afanda.pub_info()
afanda,cry()
# 创建第二个小孩
afanti=Children('阿凡提','黄色的')
anfanti.pub_info()
anfanti.drink()
# afanti.__la() 无法在类外调用私有成员
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值