1 知识点:Object Oriented Programming (OOP)
类和示例的区别:群体和个体的区别。
万事万物,皆为对象。
注意:类是对象,由类生成的实例,也是对象。
对比
面向过程编程:首先分析出解决问题所需要的步骤(即“第一步做什么,第二步做什么,第三步做什么”),然后用函数
实现各个步骤,再依次调用。
面向对象编程:不是考虑执行过程,而是考虑先创建类、定义好属性、方法(是什么和能做什么)
举个栗子:奶牛和黄牛都是牛
上面这句话隐含的共识:奶牛和黄牛都属于牛这个类。
属性(attribute
):有什么特征,比如体重大,都吃草
方法(method
):有哪些行为和作用,比如能站着睡觉...
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
# 类名首字母大写
class Chinese:
# 用赋值语句,创建类的属性
eye = 'black'
# 创建实例方法时,不要漏了 self
def eat(self):
print('吃饭,选择用筷子。')
注:
- 类名的首字母要大写
1.1 关于 self
的解释
- 实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数
self
- 参数
self
的特殊之处:在定义时不能丢,在调用时要忽略 - 参数
self
的作用:self
会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替self
,在代码中运行。
类的实例化与调用
Liu_Xiang = Chinese()
print(type(Liu_Xiang))
Liu_Xiang.eat()
self
的作用相当于先给实例占了个位置,等到实例创建好就“功成身退,退位让贤”,其存在是为了方便数据的流转。
参数内部调用
# 类名首字母大写
class Chinese:
# 用赋值语句,创建类的属性
eye = 'black'
# 创建实例方法时,不要漏了 self
def eat(self):
print(self.eye)
print('吃饭,选择用筷子。')
2 初始化方法
定义初始化方法的格式:def __init__(self)
初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
class Chinese:
def __init__ (self, mouth, eye):
self.mouth = mouth # self.不能丢
self.eye = eye
def body(self):
print('我有%s张嘴巴' % self.mouth)
print('我有%s只眼睛' % self.eye)
person = Chinese(1, 2)
person.body()
>>> 我有1张嘴巴
>>> 我有2只眼睛
如果我们需要传入的数据能在类中长久保存并能被随时调用,初始化方法就是一个不错的解决方案。
总结:
- 面向对象编程适合那种较复杂,尤其是持续更新的代码,且将产生巨大的优势。
- 面向对象编程,将代码具体的数据和处理方法都封装在类中,让我们不用完全了解过程也可以调用类中的各种方法。
“面向对象编程,会为你打开一个新的世界”。这就相当于段誉的“北冥神功”。
3 小练习
下面的程序就可以一次性调用两个方法,因此会同时打印两句话。
class Chinese:
def __init__(self,hometown,region):
self.hometown = hometown
self.region = region
print('程序持续更新中……')
def born(self):
print('我生在%s。'%(self.hometown))
def live(self):
print('我在%s。'%(self.region))
# 新建方法,调用上面的两个方法(注:方法名可自定义)。
def citys(self):
self.born()
self.live()
Jame = Chinese('浙江', '上海')
Jame.citys()
自定义一个复读机机器人,会把你的话重复三遍。
class Robot:
def __init__(self, robot_name, my_name, sentence):
self.robot_name = input('Who am I?')
self.my_name = input('Who are you?')
self.sentence = sentence
print('hello world, tell me what you want')
def say_more(self):
print(self.sentence)
print(self.sentence)
print(self.sentence)
robot = Robot('See you')
robot.say_more()