首先恭喜大家迈过了第一阶段基础语法的学习👏🎇🍺,后面体系文章篇幅我们玩点更进阶的内容,毕竟那点知识储备离AI开发工程师还是有很大距离的,咱们并肩作战一步步学习 一、什么是“面向对象”?
假设你要描述一个人。
传统的方式(面向过程)是这样:名字、年龄、身高、体重……一堆数据扔在那里,谁用谁拿。
而面向对象的方式是:这个人本身就是一个“对象”,他自带名字、年龄,还会走路、说话、吃饭。
看出来区别了吗?
面向过程关注“怎么做”,面向对象关注“谁来做”。
在Python里,万物皆对象。列表是对象,字符串是对象,函数也是对象。你每天都在用,只是没意识到。
二、类和对象:图纸和房子的关系
要理解面向对象,先搞懂两个词:类 和 对象。
类:好比一张设计图纸。它描述了房子长什么样,有几个房间,门朝哪开。
对象:根据图纸盖出来的真实房子。图纸可以盖100栋房子,每栋房子都是独立的。
在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要想得到对象,必须先有类!
三、代码示例
""" 定义类的语法(三选一即可)第一种 class 类名(object): # 属性 # 方法第二种 class 类名(): # 属性 # 方法第三种 class 类名: # 属性 # 方法"""class Cat(object): # object可以省略,甚至(object)都可以省略 # 属性 name = 'tom' # 这个变量是类变量,所有对象都有这个属性并且值都是tom # 方法 def eat(self): print('猫吃鱼...') def sleep(self): print('猫白天睡觉...')# 给类进行实例化---> 创建该类的对象.# 对象名 = 类名()c1 = Cat()c2 = Cat()# 使用(调用)对象# 对象名.属性print(c1.name) # 第一只猫叫tomprint(c2.name) # 第二只猫也叫tom# 对象名.方法()c1.eat()c2.eat()
# 这是一个“狗”的类(图纸)class Dog: # __init__ 名字固定写法,当创建对象时候自动调用的魔术方法(以__开头的函数) def __init__(self, name, age): self.name = name # 属性:名字 self.age = age # 属性:年龄 def bark(self): # 方法:能干什么 print(f"{self.name} 汪汪叫!")# 根据图纸造两只真实的狗(对象)dog1 = Dog("旺财", 3)dog2 = Dog("小黑", 5)dog1.bark() # 旺财 汪汪叫!dog2.bark() # 小黑 汪汪叫!
伙伴们,类只管定义“狗应该有名字、年龄,并且会叫”,至于具体是哪条狗,由对象说了算,上面代码涉及一个关键词self,这是类中的方法第一个参数,不写编辑器默认也会加上,代表的含义就是创建出的那个对象,上述代码就是dog1或dog2
四 、 对象动态添加属性
# 1、定义一个Person类class Person(object): pass# 略过... 不让语法报错.临时撑起类的身体.# 2、实例化Person类,生成p1对象p1 = Person()# 3、为p1对象添加属性p1.name = '龙哥'p1.age = 38p1.address = '北京市海淀区'# 4.查看类的属性////???print(p1.name)# 龙哥print(p1.age)# 38print(p1.address)# 北京市海淀区# print(p1.id) # AttributeError: 'Person' object has no attribute 'id'
pass关键字-可以这样理解,暂时没有想好实现,一个占位符
总结
本节需要理解类和对象的关系,在python中如何定义类、属性(可以创建时候在__init__魔术方法初始化也可以后期动态添加)、方法,龙哥敲个小黑板:重点是理解,不在于语法的记忆,写多了看多了自然就可以记住、并且现在时代都是AI编程