类与对象:给数据装上功能
约 10 分钟
类是把数据和行为捆在一起:第一章用字典存学生信息、用函数处理它——信息和操作分家。类把它们装进一个包裹:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return '我是' + self.name
init 是「出厂设置」——创建时自动执行,把姓名年龄装进对象;greet 是对象自己会做的事。s = Student('小明', 14) 造出一个具体学生,s.greet() 让它打招呼。
类比:类是图纸,对象是实物。「狗」这个类规定了有名字、会叫;你的狗「旺财」是一个对象,邻居的「来福」是另一个——同一张图纸,各自的实例。
为什么必须懂类:《动手学深度学习》里每个模型都是类——net = nn.Sequential() 创建模型对象,net(X) 是调用它,net.parameters() 是取它的数据。全书就是「定义类的蓝图、创建对象、调用方法」这三步的循环。看懂类,d2l 的代码结构就全通了。
self 是什么:方法的第一个参数 self 指「我自己这个对象」——self.name 是「我的名字」,用来区分不同对象各自的属性。Python 规定它必须写在第一个,调用时却不用传,Python 自动填上。
常见误区:调用方法忘加括号——s.greet 拿到的是「方法本身」,s.greet() 才是「让它执行」。
练一练:写一个 Dog 类,有名字属性,会 bark() 返回「汪汪」,造两只狗分别叫它们 bark。
小纸条
写一个 Dog 类并造两只狗分别叫
登录 后可看答案