继承
""""""
"""
在对象中,有种关系叫做父子关系
继承--子类拥有父类中定义的属性,函数
语法:
class 类名(父类的名字)
父类的属性
父类的所有方法
子类也可以写上自己对应的属性:
子类可以自定义属性
子类可以定义自己需要的函数,如果与父类同名,
这就叫函数的覆盖,相当于子类 重写了父类的方法
"""
#动物类 -- 猫 狗
#动物类属性 父类--type_name 吃 睡
#狗--汪汪汪
#猫--喵喵
class Animal():
type_name="动物"
# __num=1 不能用
def eat(self):
print("动物能吃")
def sleep(self):
print("动物能睡觉")
class Dog(Animal):
def shout(self):
print("汪汪汪")
xioabai= Dog()
print(xioabai.type_name)
xioabai.shout()
""""""
"""
语法:
class 类名(父类1 父类2):
多继承,剩下的的和单继承没区别,但是可以多几个父类
"""
# 孙悟空 神仙(会飞) 猴子(吃香蕉)
# 神仙类 飞
# 猴子类 吃香蕉
# 孙悟空 西天取经
class Monkey():
def eat(self):
print("猴子爱吃香蕉")
class Shenxian():
def fei(self):
print("神仙会飞")
def eat(self):
print("神仙会吃")
#当父类有两个相同名称的方法时, 看SunWuKong(Monkey,Shenxian): 中谁先传入 (Monkey,是第一传入的所有取的是猴子爱吃香蕉)就取谁的方法
class SunWuKong(Monkey,Shenxian): #就近原则
def qujing(self):
print("西天取经")
wk=SunWuKong()
wk.eat()
wk.fei()
wk.qujing()
""""""
"""
A-B-C 继承可以传递 c 可同时继承a b 的属性和方法
孙子辈,不仅仅有父亲的所有函数和方法
也会有爷爷的所有函数,属性和方法
"""
#动物类 -- 猫 狗
#动物类属性 父类--type_name 吃 睡
#狗--汪汪汪
#猫--喵喵
#HolleKitty--能说话
class Animal():
type_name="动物"
# __num=1 不能用
def eat(self):
print("动物能吃")
def sleep(self):
print("动物能睡觉")
class Cat(Animal):
def shout(self):
print("喵喵喵")
class HelloKitty(Cat):
def speak(self):
print("你好,我是可爱的猫咪")
hk=HelloKitty()
hk.speak()
hk.shout()
hk.eat()
hk.sleep()
""""""
"""
父类的重写,一旦再子类存在同名函数,那么执行的时候
调用的一定是子类函数
这种行为叫做重写
"""
#动物类 -- 猫 狗
#动物类属性 父类--type_name 吃 睡
#狗--汪汪汪
#猫--喵喵
class Animal():
type_name="动物"
# __num=1 不能用
def eat(self):
print("动物能吃")
def sleep(self):
print("动物能睡觉")
class Panda(Animal):
def eat(self):
print("熊猫吃竹子")
bingdundun=Panda()
bingdundun.sleep()
bingdundun.eat()
封装
""""""
"""
"""
#需求:
# 1、聊聊体重75公斤 2、每次跑步减肥0.5公斤 3、每次吃东西 长胖1公斤
#2、倩倩 体重 45公斤 2、每次跑步减肥0.8公斤 3、每次吃东西长0.3公斤
class Person():
def __init__(self,name,weight,num,add):
self.name=name
self.weight=weight
self.num=num
self.add=add
def jianfei(self):
self.weight-=self.num
print("{}跑步后,体重为{}".format(self.name,self.weight))
def eat(self):
self.weight-=self.num
print("{}跑步后,体重为{}".format(self.name,self.weight))
changfei=Person("长丰",75,0.5,1)
xiaomei=Person("小妹",45,0.8,0.3)
changfei.jianfei()
xiaomei.eat()
"""
在面向对象中,我们可以定义一个公式,或者说定义一段同样的逻辑,
交给不同的数据进行使用,这个叫封装
"""
多态
""""""
"""
为不同的数据类型,提高一个统一的接口
计算机程序 运行的时候 相同内容 送给不同的类
根据你的对象区别,引发不同的应为
"""
class PayMent():
def pay(self):
print("给钱")
class Wechat(PayMent):
def pay(self):
print("微信支付")
class Ali(PayMent):
def pay(self):
print("支付宝支付")
class Card(PayMent):
def pay(self):
print("信用卡支付")
class StarPay():
def pay(self,obj):
obj.pay()
p=Wechat
ali=Ali()
s=StarPay()
s.pay(ali)
# 根据不同的对象,进行不同的操作,多态
类属性
""""""
"""
类名.__doc__:类文档(如果有,自己定义的)
类名.__dict__:类的属性
类名.__name__ 类名
类名.__module__ 模块
类名.__bases__ 所有父类
"""
class Person():
def __init__(self,name,age,sex,job):
self.sname=name
self.age=age
self.__sex=sex
self.__job=job
def eat(self):
print("{}爱吃饭".format(self.sname)) #Person.sname 也是一样的
def work(self):
print("职业是{}".format(self.__job))
print(Person.__doc__)
print(Person.__dict__)
print(Person.__bases__)
print(Person.__module__)
"""
类——(某个业务,可能需要多个类协同完成)
类A 复制干xxx事情 类b 复制干xxx事情
类A 中,我应该定义什么属性 什么函数
1、我们是上帝,我需要某段代码来帮助我们完成任务,我来创建
2、实例化,进行调用
3、属性 类属性喝实例属性 来让这个类有逻辑
4、函数
面向对象——封装 多态 继承
"""
""""""
"""
定义一个类的过程中,我没有对它定义任何属性,而是留在实例中的定义?
实例:(instance):
类——模块——构造出来的具体的实例对象
Person -- 小明
类名()--得到的就是一个instance
实例属性:(__int__)传入
公有,私有
"""
class Person():
def __init__(self,name,age,sex,job):
self.sname=name
self.age=age
self.__sex=sex
self.__job=job
def eat(self):
print("{}爱吃饭".format(self.sname)) #Person.sname 也是一样的
def work(self):
print("职业是{}".format(self.__job))
liaoliao = Person(name="廖廖",age=18,sex="女",job="测试")
liaoliao.eat()
liaoliao.work()
print(liaoliao.sname)
""""""
"""
类属性:定义在类中的变量,我们统称类属性(不在函数中)
公有类属性:常规变量的定义
私有类属性:用两个下划线开头的,只能在类使用
在外面获取到对应的公有类属性——实例名.属性名 就能获取
在外面获取到对应的私有类属性——需要类开出获取属性的函数
在类里面,直接通过类名.属性名获取
"""
class Person():
type="人类"
num=0
__phone=134524345
def eat(self):
print("爱美是天性")
print(Person.num)
print(Person.__phone)
#例如我可以对私有属性进行设置值
def setShuxing(self,phone):
self.__phone=phone
#通过get获取属性
def getShuxing(self):
return self.__phone
p=Person()
print(p.type)
print(p.num)
print(p.getShuxing()) #不能直接写成p.__Phone 因为我们设置的电话是私有属性 需要通过get来获取(类开出获取属性的函数)
#还可以直接设置电话后再获取
print("-----------------")
p.setShuxing(1111000)
print(p.getShuxing())
p.eat()
|