先看看一般的类定义如下:

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基础教程:对象之间的交互相关推荐

  1. python每天八分钟教程_每天八分钟Python基础教程——对象持久化、序列化

    之前,在使用Python开展数据分析的过程中,经常会遇到需要基于同一份中间结果分别做不同维度的分析统计,开始我们做的思路是每次都重新计算,后来发现在TB级别的数据背景下这种操作是非常浪费算力的,考虑到 ...

  2. python基础教程博客_python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  3. python基础教程攻略-python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  4. python基础教程是什么意思-python基础教程都有什么?

    分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...

  5. python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  6. python基础教程是什么-Python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  7. python基础教程-学习python有什么好的视频教程?

    干货来袭,以下均为python好的学习视频,我们先从python的入门教程开始分享起! python入门教程(600集)https://www.bilibili.com/video/BV1ex411x ...

  8. python基础教程第三版-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  9. python基础教程是什么-python基础教程都有什么?

    分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...

最新文章

  1. iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图
  2. linux下打开配置文件命令_Linux下用户权限相关命令
  3. 利用云安监控和管理云
  4. python基础教程免费下载-Python基础教程(第2版)
  5. KNN--K近邻算法
  6. C语言连接Oracle数据库
  7. 梅特勒托利多xk3124电子秤说明书_梅特勒电子秤校准(标定)步骤
  8. 奔图3305_奔图Pantum P3305DN打印机驱动官方版
  9. android 固件 修改工具箱,固件工具箱(ROM Toolbox)
  10. 工业数字相机的应用及基础知识
  11. phpnow搭建本地网站服务器,phpnow搭建本地网站服务器
  12. android studio 初始化项目加载时间过长或失败问题解决
  13. win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
  14. React Native布局实践:开发京东客户端首页遇到的坑
  15. 2022-2028年全球与中国个人冷却装置行业竞争格局与投资战略研究
  16. Java反射机制实现与原理
  17. 立波、海波、秀波,一波波秀得过亚马逊CEO最贵离婚案吗?
  18. css自适应图片样式,css怎么让图片自适应?css图片自适应大小的方法介绍
  19. 02 Python的自我介绍(数字、字符串、列表)
  20. 蚂蚁数字科技与梆梆安全达成战略合作 共同构建移动端全链路的安全能力

热门文章

  1. My1stServlet
  2. iOS开发 Xcode8中遇到的问题及改动
  3. phoenix 开发API系列 目录
  4. 让博客园的编辑器自动上传外链图片
  5. Google Map API使用详解(十)——使用JavaScript创建地图详解(上)
  6. 选购个人计算机小结,计算机实训小结精选 .doc
  7. java 线程aba,JAVA中CAS-ABA的问题解决方案AtomicStampedReference
  8. 【实用】SAP MR8M校验增强
  9. 【MM模块】Releasing Blocked Invoices 释放冻结发票
  10. SAP 预算控制业务集成