11.面向对象(封装、继承、多态)

1、面向对象编程三大特征:封装、继承、多态

1)封装:面向对象编程的第一步 将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法,对象方法的细节都被封装在类的内部


# 需求:小明爱跑步
# 1.小明体重75.0公斤
# 2.每次跑步会减肥0.5公斤
# 3.每次吃东西体重会增加1公斤
# 4.小美的体重是45.0公斤
class People:
weight=0
name='null'
def __init__(self,tz,name):
# 实例属性
self.weight=tz
self.name=name

def running(self):
self.weight-=0.5
print(f'每次跑步会减肥0.5公斤,现在的体重是{self.weight}')

def eating(self):
self.weight += 1
print(f'每次吃东西体重会增加1公斤,现在的体重是{self.weight}')

xiaoming=People(75,'小明')
xiaoming.running()
xiaoming.eating()
xiaomei=People(45,'小美')
xiaomei.eating()

2)继承
子类拥有父类以及父类的父类中封装的所有属性和方法。

继承分为单继承和多继承

注意:1)子类调用方法,先找自己,再找父类,再找父类的父类,以此类推(如果多继承,则采用就近原则来进行调用)

1)单继承:

class 子类名(父类名):
类主体

重写父类方法有两种方式:
1、覆盖父类的方法
如果在开发过程中,父类方法的实现和子类方法的实现完全不同,就可以使用覆盖的方法在子类中重新编写父类中的方法,在运行中,只会调用在子类中重写的父类的方法而不会调用父类的方法
2、扩展父类方法
如果在开发过程中,子类的方法的实现包含父类的方法的实现,在需要位置使用父类名.方法(self)来调用父类方法的执行,代码其他位置针对子类的需求,编写子类特有的代码实现


class People:
def __init__(self,name,age):
self.name=name
self.age=age
print(self.name,self.age)

def speak(self):
print('父类方法speak')

def sleep(self):
print('父类的sleep方法.....')

class Student(People):

#子类重写父类方法
def speak(self):
# 子类方法需要调用父类方法如何进行调用
People.speak(self)
print('子类重写父类speak方法')

dasheng=Student('大圣',20)
# dasheng.sleep()
dasheng.speak()

2)多继承
class 子类名(父类名1,父类名2):
类主体


class People:
def __init__(self,name,age):
self.name=name
self.age=age
print(self.name,self.age)

def speak(self):
print('父类方法speak')

def sleep(self):
print('父类的sleep方法.....')

class pythonStudent(People):
#子类重写父类方法
def speak(self):
# 子类方法需要调用父类方法如何进行调用
People.speak(self)
print('子类重写pythonStudent父类speak方法')

class javaStudent:
pass
def speak(self):
# 子类方法需要调用父类方法如何进行调用
People.speak(self)
print('子类重写javaStudent父类speak方法')

class student(javaStudent,pythonStudent):

def __init__(self,name):
self.languae='中文'
self.name=name

CR7=student('CR7')
CR7.speak()


3)多态
不同的子类调用相同的方法会执行不同代码(多态)

class wx:
def pay(self):
print('采用微信支付')

class zfb:
def pay(self):
print('采用支付宝支付')

class yl:
def pay(self):
print('采用银联支付')

def start_pay(object):
object.pay()

wx1=wx()
yl1=yl()
zfb1=zfb()
start_pay(zfb1)

原文地址:https://www.cnblogs.com/Murraya/p/14020604.html