### 魔术方法
#__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)