什么是面向对象
之前我们学习了函数,通过函数将一些特定的逻辑封装起来。这种将代码组织起来的方式也叫过程式编程。我们今天学习的面向对象编程则将程序做了更高维度的封装,用人类更容易理解的方式编程。
类&实例
中国道德经有一句话:道生一,一生二,二生三,三生万物,讲的是世间的万物都是从特定的模板里生出来的。这个模板就是类,生出来的东西就是对象。
我们来看几个案例:
宠物狗有很多种:泰迪、金毛、哈士奇 都属于狗科动物。狗本身是一个模板(类)。狗作为一个类,拥有尾巴、腿、耳朵等身体器官;可以执行跑、叫等动作。泰迪、金毛、哈士奇 是从狗模板“生出来的”,因此它们也拥有这些属性。泰迪、金毛、哈士奇 就是狗这个类的实例。
汽车也有很多种,公交车、轿车、越野车都属于汽车。汽车本身是一个模板(类),汽车作为一类,拥有方向盘、发动机、车身、最大时速等属性;可以执行发动、变方向、鸣笛等方法。公交车、轿车、越野是从汽车模板“生出来”的,因此,他们也拥有这些构造。公交车、轿车、越野车就是汽车这个类的实例。
看过上面这两个例子,对什么是是类、什么是实例有没有一个形象的了解呢?下面我们看看用python怎么表达类和实例吧。
在python里定义类
在python中定义一个类可以参照下面的语法:
class Dog: pass #类代码
我们用 class关键字定义一个类,注意类的名字用首字母大写的单词来组成,为什么要首字母大写呢?我们下面会解释。
python里对类实例化
定义好类,接下来通过类来构建实例了。看代码:
teddy = Dog() print(teddy)
我们定义了一个变量teddy
,Dog()方法就是定义一个类的实例。print(teddy)
会输出 <__main__.Dog object at 0x1041019e8>
我们把类的首字母大写,就不会把类和实例搞乱了。
实例属性
类在定义好后,会拥有一个__init__方法。这个方法是当依照这个类构建实例的时候被调用的,我们来看代码:
class Dog: def __init__(self): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' teddy = Dog() print(teddy.leg)
在__init__方法里,有一个self参数,这个参数用来表达实例本身。那里面的 self.tail
、self.leg
就是实例属性了。类的每个实例有自己的属性。比如泰迪的尾巴是短的、耳朵是下垂的。而哈士奇的尾巴是长的,尾巴是立起来的。
方法
除了属性外,类还有方法。我们来看代码:
class Dog: def __init__(self, name): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' self.name = name def call(self): print("汪汪", self.name) teddy = Dog('teddy') husky = Dog('husky') teddy.call() husky.call()
call
函数是类的方法,每个实例都会有这个方法。方法定义中会有默认的self参数,用来代表实例自己。这个代码还可以印证每个实例有自己的属性。
类属性
除了实例属性外,还有类属性。看代码:
class Dog: dogCount = 0 def __init__(self, name): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' self.name = name Dog.dogCount += 1 def call(self): print("汪汪", self.name) teddy = Dog('teddy') teddy.call() print(Dog.dogCount) husky = Dog('husky') husky.call() print(Dog.dogCount)
dogCount 是Dog类的属性,类属性从属于类。每次改版类属性的值都会反映的所有的实例上。
这节课我们讲了面向对象,面向对象是编程里很核心的概念。一定要能够有清晰的理解,怎么样,小朋友们掌握了吗?
阿达老师-孩子身边的编程专家
网友评论