当前位置: 首页 > news >正文

Week1:类,类与类之间的关系,继承,封装,多态

把之前学的基础语法过了一遍,新学了类,以及三大特性。

类:

class Dog:def __init__(self,name,age,breed,attack_val,life_val):self.name=nameself.age=ageself.breed=breedself.attack_val=attack_valself.life_val=100def bite(self,people):people.life_val-=self.attack_valprint('狗%s咬了人%s,人掉血%s,还剩血量%s'%(self.name,people.name,self.attack_val,people.life_val))class People:nationalty='CN'def __init__(self,name,age,sex,attack_val,self_val):self.name=nameself.age=ageself.sex=sexself.attack_val=attack_valself.life_val=100d1=Dog('ww',1,'金毛',30,100)
p1=People('mm',22,'M',40,100)
d1.bite(p1)

类与类之间的关系:

依赖:通过一个纽带关联在一块

传进去的不是一个简单的名字,而是一个完整个体的所有属性,例如人和狗是依赖关系,狗的主人是人,传过去不是把人的名字传进去而是一个人的所有属性。

关联:要双向关联 p1.parter=p2  p2.parter=p1

           取消关联也应该双向取消,p2.parter=None  p1.parter=None

         也可以新建一个类

组合:人的大脑、心脏,这些器官组成人,人没了,器官也无法存活。

聚合:电脑各部件组成完整的电脑,电脑烂了,cpu还是好的,还是完整的个体。

继承:如果两个类之间有共同属性,则可以使用继承关系,比如动物是一个类,动物可以跑(仅有这个跑的函数),而猫也是一个类,猫有动物里面跑的功能,则class Cat(Animal)定义猫这个类

​
class Animal:a_type='哺乳动物'def __init__(self,name,age,sex):self.name=nameself.age=ageself.sex=sexdef eat(self):print("%s is eating..."%self.name)class Person(Animal):a_type='哺乳高等动物'def __init__(self,name,age,sex,hobby):Animal.__init__(self,name,age,sex)self.hobby=hobby#先执行父类的方法再执行子类的def take(self):print('Person %s is taking...'%self.name)
p=Person('Alex',19,'M','games')
print(p.name,p.sex,​

在原先父类拥有的name,age,sex参数在,子类多了一个hobby。

方法一:使用Animal.__init__(self,name,age,sex)继承,再从父类的基础上加一个self.hobby=hobby的属性。

方法二:super(Person,self).__init__(name,age,sex)

方法三:super().__init__(name,age,sex)

多继承:如果继承的两个父类有相同的函数,按照从左到右继承。

封装:

#封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
#要访问该类的代码和数据,必须通过严格的接口控制
class Person(object):def __init__(self,name,age):self.name=nameself.age=ageself.__life_val=100#私有,加两个__def get_life_val(self):print('生命值还有',self.__life_val)def __breath(self):print('%s is breathing...'%self.name)def got_attack(self):self.__life_val-=20print('被攻击了,生命值减20')self.__breath()return self.__life_val
p=Person('Alex',19)
#p.get_life_val()
p.got_attack()
p.get_life_val()
p._Person__breath()
p._Person__life_val=20
p.get_life_val()

私有属性用__(双下划线)封装起来。例如:self.__life_val=100#私有,加两个__。

在这个私有属性所属的类里面可以访问这个变量,但是在外部不能直接访问,可以定义一个访问函数访

life_val是一个私有属性,通过got_attack这个方法将这个私有属性封装起来。也可以将方法变成一个私有的方法.

如果实在要访问breath,则可以使用方法:实例名._类名+方法 

例如:p._Person__breath()

 也可以修改

多态:

1.通过统一函数接口实现多态

class Dog(object):def sound(self):print('汪汪汪...')
class Cat(object):def sound(self):print('喵喵喵...')
def make_sound(animal_type):#统一调用接口animal_type.sound()#不管传进来什么动物,都调用sound方法
d=Dog()
c=Cat()
make_sound(d)
make_sound(c)

运行步骤:

当执行 make_sound(dog) 时,dog传给 animal_type ,dog 是 Dog 类的实例,检查 Dog 类是否有 sound() 方法 ,有,执行 Dog.sound() 。

2.通过抽象类实现多态(常用)


文章转载自:

http://MUvcA4EY.nykzL.cn
http://Lw60FFL4.nykzL.cn
http://y8vdvGVE.nykzL.cn
http://OqjwhuHE.nykzL.cn
http://hsojXDIQ.nykzL.cn
http://zE0cg0XL.nykzL.cn
http://69yilWkq.nykzL.cn
http://YXpszqHd.nykzL.cn
http://uQogocXe.nykzL.cn
http://AVC4EZr5.nykzL.cn
http://uplmvlNk.nykzL.cn
http://sEzd414C.nykzL.cn
http://iydhJl08.nykzL.cn
http://9mdL4tZG.nykzL.cn
http://arpHfZbi.nykzL.cn
http://iKqEmUMk.nykzL.cn
http://oqxqm7CC.nykzL.cn
http://c9p1v1Sk.nykzL.cn
http://4fc7J2cf.nykzL.cn
http://Zf3yfjKk.nykzL.cn
http://2JI3U4ym.nykzL.cn
http://ifc6lzmp.nykzL.cn
http://9d07kLpC.nykzL.cn
http://JNJQ4I2z.nykzL.cn
http://JSQZBMHK.nykzL.cn
http://OXaNk6k7.nykzL.cn
http://fVB6Rlag.nykzL.cn
http://cFNckAUm.nykzL.cn
http://lcqsxenL.nykzL.cn
http://6x6mGfh7.nykzL.cn
http://www.dtcms.com/a/383390.html

相关文章:

  • PostgreSQL 上的向量搜索实践
  • 金融科技:讓銀行服務更簡單便捷,推動數碼化轉型和提升客戶體驗
  • Games101 第七章 几何
  • 四、Scala深入面向对象:类、对象与伴生关系
  • quick_sort【快速排序】
  • Python 入门教学
  • 从零到顶会:NLP科研实战手册
  • C++(new和malloc)
  • JAVA算法练习题day11
  • 嵌入式固件升级要点总结
  • HarmonyOS 应用开发深度实践:驾驭 Stage 模型与 ArkTS 声明式 UI
  • MySQL的性能优化。
  • [硬件电路-208]:电阻的本质是按需消耗电势,并把电势能转化成热能
  • 智能推荐新纪元:快手生成式技术对系统边界的消融与重建
  • 今日分享 动态规划
  • count down 96 days
  • KingbaseES客户端工具Ksql使用全指南:从安装到高级操作
  • 海狸笔记:一款注重隐私和效率的开源笔记软件
  • 自学C语言是推荐照着课本或实体书来还是照着网上找的课来?
  • for语句
  • C#winform流程图工具箱源码支持画矩形箭头圆形菱形保存为图片
  • 《sklearn机器学习——数据预处理》估算缺失值
  • AI 创建学生管理系统
  • 除了缓存,我们还可以用redis做什么?
  • SSRF服务器端请求伪造
  • Spring事务注解@Transactional核心机制详解
  • [问题记录]刚下载的Qt,跑项目出现的问题
  • ACP笔记(二):大模型的问答工作流程及影响大模型内容生成的随机生成参数
  • 安卓学习 之 Activity的生明周期
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘pandas’ 问题