python基础教程:对象之间的交互
先看看一般的类定义如下:
class 类名:def __init__(self,参数1,参数2):self.对象的属性1 = 参数1self.对象的属性2 = 参数2def 方法名(self):passdef 方法名2(self):pass对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法#括号里传参数,参数不需要传self,其他与init中的形参一一对应#结果返回一个对象
对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
对象之间的交互
现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人。
现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法。
有了狗类,我们还要实例化一只实实在在的狗出来。
然后人和狗就可以打架了。现在我们就来让他们打一架吧!
class Person: # 定义一个人类role = 'person' # 人的角色属性都是人def __init__(self, name, aggressivity, life_value):self.name = name # 每一个角色都有自己的昵称;self.aggressivity = aggressivity # 每一个角色都有自己的攻击力;self.life_value = life_value # 每一个角色都有自己的生命值;def attack(self,dog):# 人可以攻击狗,这里的狗也是一个对象。# 人攻击狗,那么狗的生命值就会根据人的攻击力而下降dog.life_value -= self.aggressivityclass Dog: # 定义一个狗类role = 'dog' # 狗的角色属性都是狗def __init__(self, name, breed, aggressivity, life_value):self.name = name # 每一只狗都有自己的昵称;self.breed = breed # 每一只狗都有自己的品种;self.aggressivity = aggressivity # 每一只狗都有自己的攻击力;self.life_value = life_value # 每一只狗都有自己的生命值;def bite(self,people):# 狗可以咬人,这里的狗也是一个对象。# 狗咬人,那么人的生命值就会根据狗的攻击力而下降people.life_value -= self.aggressivityegg = Person('egon',10,1000) #创造了一个实实在在的人eggprint(egg.name) # 在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常
ha2 = Dog('二愣子','哈士奇',10,1000) #创造了一只实实在在的狗ha2
print(ha2.life_value) #看看ha2的生命值
egg.attack(ha2) #egg打了ha2一下
print(ha2.life_value) #ha2掉了10点血
面向对象的组合用法
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Weapon:def prick(self, obj): # 这是该装备的主动技能,扎死对方obj.life_value -= 500 # 假设攻击力是500class Person: # 定义一个人类role = 'person' # 人的角色属性都是人def __init__(self, name):self.name = name # 每一个角色都有自己的昵称;self.weapon = Weapon() # 给角色绑定一个武器;egg = Person('egon')
egg.weapon.prick()
#egg组合了一个武器的对象,可以直接egg.weapon来使用组合类中的所有方法
圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用
from math import piclass Circle:'''定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法'''def __init__(self,radius):self.radius = radiusdef area(self):return pi * self.radius * self.radiusdef perimeter(self):return 2 * pi *self.radiuscircle = Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长class Ring:'''定义了一个圆环类提供圆环的面积和周长的方法'''def __init__(self,radius_outside,radius_inside):self.outsid_circle = Circle(radius_outside)self.inside_circle = Circle(radius_inside)def area(self):return self.outsid_circle.area() - self.inside_circle.area()def perimeter(self):return self.outsid_circle.perimeter() + self.inside_circle.perimeter()ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python课程
class BirthDate:def __init__(self,year,month,day):self.year=yearself.month=monthself.day=dayclass Couse:def __init__(self,name,price,period):self.name=nameself.price=priceself.period=periodclass Teacher:def __init__(self,name,gender,birth,course):self.name=name self.gender=genderself.birth=birthself.course=coursedef teach(self): print('teaching')p1=Teacher('egon','male', BirthDate('1995','1','27'), Couse('python','28000','4 months')) print(p1.birth.year,p1.birth.month,p1.birth.day) print(p1.course.name,p1.course.price,p1.course.period)
'''
运行结果:
1995 1 27
python 28000 4 months
'''
python基础教程:对象之间的交互相关推荐
- python每天八分钟教程_每天八分钟Python基础教程——对象持久化、序列化
之前,在使用Python开展数据分析的过程中,经常会遇到需要基于同一份中间结果分别做不同维度的分析统计,开始我们做的思路是每次都重新计算,后来发现在TB级别的数据背景下这种操作是非常浪费算力的,考虑到 ...
- python基础教程博客_python基础教程(一)
之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...
- python基础教程攻略-python基础教程(一)
之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...
- python基础教程是什么意思-python基础教程都有什么?
分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...
- python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象
菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...
- python基础教程是什么-Python基础教程(一)
之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...
- python基础教程-学习python有什么好的视频教程?
干货来袭,以下均为python好的学习视频,我们先从python的入门教程开始分享起! python入门教程(600集)https://www.bilibili.com/video/BV1ex411x ...
- python基础教程第三版-Python基础教程(第三版)(七)再谈抽象
菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...
- python基础教程是什么-python基础教程都有什么?
分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...
最新文章
- iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图
- linux下打开配置文件命令_Linux下用户权限相关命令
- 利用云安监控和管理云
- python基础教程免费下载-Python基础教程(第2版)
- KNN--K近邻算法
- C语言连接Oracle数据库
- 梅特勒托利多xk3124电子秤说明书_梅特勒电子秤校准(标定)步骤
- 奔图3305_奔图Pantum P3305DN打印机驱动官方版
- android 固件 修改工具箱,固件工具箱(ROM Toolbox)
- 工业数字相机的应用及基础知识
- phpnow搭建本地网站服务器,phpnow搭建本地网站服务器
- android studio 初始化项目加载时间过长或失败问题解决
- win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
- React Native布局实践:开发京东客户端首页遇到的坑
- 2022-2028年全球与中国个人冷却装置行业竞争格局与投资战略研究
- Java反射机制实现与原理
- 立波、海波、秀波,一波波秀得过亚马逊CEO最贵离婚案吗?
- css自适应图片样式,css怎么让图片自适应?css图片自适应大小的方法介绍
- 02 Python的自我介绍(数字、字符串、列表)
- 蚂蚁数字科技与梆梆安全达成战略合作 共同构建移动端全链路的安全能力