Python 对象的知识
【摘要】 python 对象的学习笔记。
一、对象的相关知识
回到咱们的美女大战野兽:现在我们需要对我们的类做出一点点改变
人类除了可以走路之外,还应该具备一些攻击技能。
class Person: # 定义一个人类
role = 'person' # 人的角色属性都是人
def __init__(self, name, attack_power, life_value):
self.name = name # 每一个角色都有自己的昵称;
self.attack_power = attack_power # 每一个角色都有自己的攻击力;
self.life_value = life_value # 每一个角色都有自己的生命值;
def attack(self, wild_animal):
# 美女可以攻击野兽,这里的野兽也是一个对象。
# 美女攻击野兽,那么野兽的生命值就会根据美女的攻击力而下降
wild_animal.life_value -= self.attack_power
1、对象是关于类而实际存在的一个例子,即实例
2、对象/实例只有一种作用:属性引用
lola = Person('lola', 100, 10000)
print(lola.name)
print(lola.attack_power)
print(lola.life_value)
结果:
D:\YuchuanProjectData\PythonProject\venv\Scripts\python.exe D:/YuchuanProjectData/PythonProject/Yuchuan_class_info0001.py
lola
100
10000
Process finished with exit code 0
当然了,你也可以引用一个方法,因为方法也是一个属性,只不过是一个类似函数的属性,我们也管它叫动态属性。
引用动态属性并不是执行这个方法,要想调用方法和调用函数是一样的,都需要在后面加上括号
print(lola.attack)
<bound method Person.attack of <__main__.Person object at 0x0000024DF145D7F0>>
我知道在类里说,你可能还有好多地方不能理解。那我们就用函数来解释一下这个类呀,对象呀到底是个啥,你偷偷的用这个理解就好了,不要告诉别人
帮你了解面向对象:
def Person(*args, **kwargs):
self = {}
def attack(self, dog):
dog['life_value'] -= self['attack_power']
def __init__(name, attack_power, life_value):
self['name'] = name
self['attack_power'] = attack_power
self['life_value'] = life_value
self['attack'] = attack
__init__(*args, **kwargs)
return self
lola = Person('lola', 168, 111896)
print(lola['name'])
结果:
D:\YuchuanProjectData\PythonProject\venv\Scripts\python.exe D:/YuchuanProjectData/PythonProject/Yuchuan_class_info0001.py
lola
Process finished with exit code 0
面向对象小结——定义及调用的固定模式
小结:
class 类名:
def __init__(self,参数1,参数2):
self.对象的属性1 = 参数1
self.对象的属性2 = 参数2
def 方法名(self):pass
def 方法名2(self):pass
对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西
#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
#括号里传参数,参数不需要传self,其他与init中的形参一一对应
#结果返回一个对象
对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
练习:
练习一:在终端输出如下信息
三毛,12岁,女,上山去砍柴
三毛,12岁,女,开车去泡妞
三毛,12岁,女,最爱大保健
张三,36岁,男,上山去***
张三,36岁,男,开车去泡妞
张三,36岁,男,最爱大保健
李四…
二、对象之间的交互
现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人。
现在我们要再创建一个野兽类,野兽就不能打人了,只能咬人,所以我们给狗一个bite方法。
有了野兽类,我们还要实例化一只实实在在的野兽出来。
然后人和野兽就可以搞起来了。现在我们就来让他们搞起来吧!
1、创建一个野兽类
class WildAnimal: # 定义一个野兽类
role = 'wild_animal' # 野兽的角色属性都是野兽
def __init__(self, name, breed, attack_power, life_value):
self.name = name # 每一只野兽都有自己的昵称;
self.breed = breed # 每一只野兽都有自己的品种;
self.attack_power = attack_power # 每一只野兽都有自己的攻击力;
self.life_value = life_value # 每一只野兽都有自己的生命值;
def bite(self, Person):
# 野兽可以咬人,这里的野兽也是一个对象。
# 野兽咬人,那么人的生命值就会根据野兽的攻击力而下降
Person.life_value -= self.attack_power
2、实例化一只实实在在的狼
wolf_king = WildAnimal('狼王', '野狼', 998, 88989) # 创造了一只实实在在的狼
3、交互 lola打wolf_king一下
wolf_king = WildAnimal('狼王', '野狼', 998, 88989) # 创造了一只实实在在的狼
print(wolf_king.life_value) # 看看wolf_king的生命值
lola.attack(wolf_king) # egg打了wolf_king一下
print(wolf_king.life_value) # wolf_king掉了100点血
结果:
D:\YuchuanProjectData\PythonProject\venv\Scripts\python.exe D:/YuchuanProjectData/PythonProject/Yuchuan_class_info0001.py
88989
88889
Process finished with exit code 0
4、完整的代码
class Person: # 定义一个人类
role = 'person' # 人的角色属性都是人
def __init__(self, name, attack_power, life_value):
self.name = name # 每一个角色都有自己的昵称;
self.attack_power = attack_power # 每一个角色都有自己的攻击力;
self.life_value = life_value # 每一个角色都有自己的生命值;
def attack(self, wild_animal):
# 美女可以攻击野兽,这里的野兽也是一个对象。
# 美女攻击野兽,那么野兽的生命值就会根据美女的攻击力而下降
wild_animal.life_value -= self.attack_power
lola = Person('lola', 100, 10000)
# print(lola.name)
# print(lola.attack_power)
# print(lola.life_value)
# print(lola.attack)
class WildAnimal: # 定义一个野兽类
role = 'wild_animal' # 野兽的角色属性都是野兽
def __init__(self, name, breed, attack_power, life_value):
self.name = name # 每一只野兽都有自己的昵称;
self.breed = breed # 每一只野兽都有自己的品种;
self.attack_power = attack_power # 每一只野兽都有自己的攻击力;
self.life_value = life_value # 每一只野兽都有自己的生命值;
def bite(self, Person):
# 野兽可以咬人,这里的野兽也是一个对象。
# 野兽咬人,那么人的生命值就会根据野兽的攻击力而下降
Person.life_value -= self.attack_power
wolf_king = WildAnimal('狼王', '野狼', 998, 88989) # 创造了一只实实在在的狼
print(wolf_king.life_value) # 看看wolf_king的生命值
lola.attack(wolf_king) # egg打了wolf_king一下
print(wolf_king.life_value) # wolf_king掉了100点血
一个简单的例子帮你理解面向对象
from math import pi
class Circle:
"""
定义了一个圆形类;
提供计算面积(area)和周长(perimeter)的方法
"""
def __init__(self, radius):
self.radius = radius
def area(self):
return pi * self.radius * self.radius
def perimeter(self):
return 2 * pi * self.radius
circle = Circle(10) # 实例化一个圆
area1 = circle.area() # 计算圆面积
per1 = circle.perimeter() # 计算圆周长
print(area1, per1) # 打印圆面积和周长
结果:
D:\YuchuanProjectData\PythonProject\venv\Scripts\python.exe D:/YuchuanProjectData/PythonProject/Yuchuan_class_info0001.py
314.1592653589793 62.83185307179586
Process finished with exit code 0
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)