python多态和封装_python3基础-多态、封装

多态

由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同

eg:多态:同一种事物的多种形态,动物分为人、猪、狗、猫等

class Animal(): #同一类事物:动物

def __init__(self,name,food):

self.name=name

self.food=fooddefeat(self):print("%s 正在吃 %s"%(self.name,self.food))class People(Animal): #动物形态1:人

defeat(self):print("人类吃的东西是%s"%self.food)class Dog(Animal): #动物形态2:狗

defeat(self):print("狗吃的东西是%s"%self.food)#实例化得到两个对象

people1 =People('人类-苏','牛排')

dog1= Dog('狗-小黑','狗粮')#多态性指的是可以不用考虑对象具体类型的情况下而直接使用对象

people1.eat()

dog1.eat()

#多态性指的是可以不用考虑对象具体类型的情况下而直接使用对象

people1.eat()

dog1.eat()

#多态性:一种调用方式,不同的执行结果(多态性)

# 定义统一的接口

def eat(animal): #animal 没有类型限制,可以传入不同类型的值

animal.eat() #调用逻辑一样,执行的结果却不一样

print("-----------")

eat(people1)

eat(dog1)

多态性的好处在于增强了程序的灵活性和可扩展性,例如通过继承了Animal类创建了一个新的类,实例化得到的对象obj,可以使用相同的方式使用obj.eat()

class Pig(Animal): #动物形态3:猪

defeat(self):print("猪吃的东西是%s"%self.food)

pig1= Pig('猪','猪食')

pig1.eat()

总结:

多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。

多态性的本质在于不同的类中定义有相同的方法名,则可以在父类引入抽象类的概念来硬性限制子类必须有某些方法名

importabc#指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化

class Animal(metaclass=abc.ABCMeta): #同一类事物:动物

def __init__(self,name,food):

self.name=name

self.food=food

@abc.abstractmethod#该装饰器限制子类必须定义有一个eat的方法

defeat(self):print("%s 正在吃 %s"%(self.name,self.food))

封装

封装指的是把数据与功能都整合到一起

第一层面:类本身就是一个封装

第二层面:类中定义私有的,只有在类的内部使用,外部无法访问

Python的class机制采用双下划线开头的方式将属性隐藏起来==》设置成私有的

类中所有双下划线开头的属性在类定义阶段,检测语法时自动变成 _类名_属性名的形式

classAnimal:

__N= 0#相等于 _Animal__N

num= 0_dannum= 1def __init__(self,name,food):

self.name=name

self.food=food

self.__action='哭'def eat(self):

print("%s 正在吃 %s"%(self.name,self.food))

def __eyes(self): # _Animal__eyes

print("__eyes")

print(Animal.num)

# print(Animal.__N) AttributeError: typeobject 'Animal' has no attribute '__N'print(Animal._dannum) #单下划线 可以访问

print(Animal._Animal__N) #可以访问

animal1= Animal('小猪','注释')

print(animal1.num)

#print(animal1.__N)AttributeError: typeobject 'Animal' has no attribute '__N'#animal1.__eyes()AttributeError:'Animal' object has no attribute '__eyes'

第三层面:明确区分内外,内部的实现逻辑,外部无法知晓,并且为封装到内部的逻辑提供一个访问接口给外部使用

classAnimal:__N = 0 #相等于 _Animal__N

num =0

_dannum= 1

def __init__(self,name,food):

self.name=name

self.food=food

self.__action ='哭'

defeat(self):print("%s 正在吃 %s"%(self.name,self.food))def __eyes(self): #_Animal__eyes

print("哈哈哈哈,我是__eyes")defeyestests(self):

self.__eyes()print(self.__action)

animal1= Animal('小猪','注释')

animal1.eyestests()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值