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)