python-面向对象


面向对象三大特征:封装 继承 多态
封装:属性和方法封装在抽象类中 具体出来一个实物 例化

# 继承

class Animal:

def eat(self):
print('动物有吃的功能')

def sleep(self):
print('动物有睡觉')

# 继承父类Animal

class Dog(Animal):
# def eat(self):
# print('狗吃东西')
# def sleep(self):
# print('睡觉')
#
def run(self):
print('狗跑')

ha=Dog()
ha.eat()
ha.sleep()
ha.run()

继承

class Animal:

def eat(self):
print('动物有吃的功能')

def sleep(self):
print('动物有睡觉')

# 继承 单继承:可以一直继承下去
# 继承父类Animal

class Dog(Animal):
def run(self):
print('狗跑')

class NomalDog(Dog):
def catch(self):
print('抓老鼠')

class GodDog(Dog):
def fly(self):
print('')

xiaotian = GodDog( )
xiaotian.eat( )
xiaotian.sleep( )
xiaotian.run( )
xiaotian.fly()

多继承 class 类名(父类,父类):

class A:
def demoA(self):
print('A')

class B:
def demoB(self):
print('B')

class C(A,B):
pass

cc=C()
cc.demoA()
cc.demoB()
 
class Master:
def __init__(self):
self.peifang = '师傅蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')
class School:
def __init__(self):
self.peifang='学校的蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')

# 如果一个类继承多个父类,优先继承第一个类的属性和方法
class student(Master,School):
pass

xiaoming=student()
xiaoming.make_cake()

重写

class Master:
def __init__(self):
self.peifang = '师傅蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')


class School:
def __init__(self):
self.peifang='学校的蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')

# 子类和父类有同名的方法和属性,会覆盖父类的方法和属性
class student(Master,School):
def __init__(self):
self.peifang='自创配方'
def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')

s = student()
s.make_cake()

super() # 指向父类
class Master:
def __init__(self):
self.peifang = '师傅蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')


class School(Master):
def __init__(self):
self.peifang='学校的蛋糕配方'

def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')
super(School,self).__init__()
super(School, self).make_cake()
# 子类和父类有同名的方法和属性,会覆盖父类的方法和属性
class student(School):
def __init__(self):
self.peifang='自创配方'
def make_cake(self):
print(f'使用{self.peifang}制作蛋糕')
super().__init__()
super().make_cake()


s = student()
s.make_cake()

私有属性 属性或者方法前加__

class Girl:
def __init__(self,name):
self.name=name
self.__age=18

def desc(self):
print('大家好我是{},年龄{}'.format(self.name,self.__age))
def __desc1(self):
print('大家好我是{},年龄{}'.format(self.name,self.__age))

# 一定要传一个值,创建这个类的时候,是走入到init这个函数
g=Girl('秋水')
g.desc()

# 私有属性不能在外部访问
#g.__desc()

# 伪私有
# 解决方案 _类名__名称
g._Girl__desc()

多态 同一类型的事务,有不同的形态

传入不同的对象,产生不同的结果
多态的定义:子类重写父类的方法,调用不同子类对象的相同方法
子类重写父类的方法 两个类最好是要去继承
调用不同子类对象的相同父类方法

多态的步骤:
定义父类
定义子类
子类对象给调用者,执行后可以看到不同子类执行的效果

class Dog:
def __init__(self,name):
self.name=name
def work(self):
print('看家')

class BigDog(Dog):
def work(self):
print('抓小偷')

class SmartDog(Dog):
def work(self):
print('缉毒')

class Person:

def with_dog(self,obj):
print('警员和%s一起去干什么'%(obj.name))
# 创建不同的对象会有不同的形态
xq=BigDog('小七')
xb=SmartDog('HAHA')

p=Person()
p.with_dog(xq)
posted on 2021-12-22 11:48  xxxxaaa  阅读(49)  评论(0)    收藏  举报