世界是物质的,但最终是精神的。
--爱因斯坦
1、起手
对于编程来说,到函数这一层次就足够了。在很久很久以前,编程只到函数这一级,比如活化石级的C语言。
但是后来出现了OOP,叫Object-Oriented Programming,中文叫面向对象编程。这一下子让很多程序员很纠结,这还没对象呢,就不能编程了?
2、类与对象
类,class,是一类事物的抽象,或者叫定义,有成员变量和成员函数。
成员变量是描述这类事物的属性,成员函数是描述这类事物的功能。
对象,object,其实就是物体,具体的某个东东。世界是由各种各样的物体组成的。如果用OOP编程,程序也是一样,是由许多对象组成的。程序是对现实世界的描述,极其精确的描述。如果你的思想不能用程序来描述,那就是不成熟的思想,这句话不是我说的。
关于类与对象的关系,举个粟子。张三是对象,李四是对象,人是类。
人是抽象的定义,涵盖了人的各种属性(成员变量,如身高,体重,有多少钱)及功能(成员函数,如吃饭,睡觉,干活)。而张三,李四是具体的人,叫对象,张三有张三的身高,有他自己的存款,吃自己的饭,睡自己的觉,干自己的活,与李四无关。现实世界里有张三,李四,但人只是概念。
OOP编程的套路是,先定义类,再用类生成具体对象,程序里跑的是对象,是具体的对象在干活。类必须生成对象才有用。类只是一个抽象的定义,做不了事。
类应该定义哪些成员变量及成员函数呢,还是看你要干啥。
下面具体一点。
3、客户类
本咖啡师每天忙忙碌碌,除了面对咖啡,就是面对喝咖啡的人。对于后者,我要编写一个类。
对于本咖啡师来说,来消费的顾客,有下面一些属性是我关心的:
名字,这是每个客户的唯一标识,这里不考虑重名。
vip级别,以前做示例的时候,是用三个list保存不同VIP级别的顾客,但是vip级别作为顾客自身的属性更直观合理一些。
账户余额,如果充值的话。默认是0。
是不是美女,这个关乎是不是免费!
有人说了,作为一顾客不是还有身高,体重,这些明显的属性呢?是的,这些属性是有的,但与喝咖啡没啥关系,所以就不用有了。
当然也可以把客户偏爱的口味记录下来,这是以后的事。
关于顾客的行为,对于本咖啡师,只关心两个事:
充值
消费
好了,先上代码。
容某慢慢道来。
第1行holiday_discount,非客户本身的属性,所以作为全局变量。
第4行是类的定义,class表明是定义一个类,Customer是类名(一般首字母大写),不要忘了冒号。
下面所有缩进的,都是本类的代码。
缩进,缩进,缩进。
第5行,def __init__(self, name, is_beauty=False)
叫构造函数,就是初始化一个对象的函数。
def, 表示定义一个函数
__init__,表示是构造函数,固定的名称。
self, 自己,代表调用此函数的具体对象。
name,设定对象的名字
is_beauty,是对象的另一个属性,是美女吗,=False,是设定一个默认值。
self.name = name,用传入的参数设定当前对象的名字
self.is_beauty = is_beauty,用传入的参数设定当前对象是不是美女
self.vip_level = -1,给当前对象的vip级别赋初值,-1,还没消费。
self.account = 0,给当前对象的充值账户的余额设初值为0,还没充值。
第11行
def recharge(self, number):
是充值函数,同样的,第一个参数是self,表示当前对象。
number是充值的数额。
当充值一定数额的时候,自动设定vip级别
对于drink函数,就是消费一杯咖啡了,默认是清咖,如果是奶咖,或者加糖浆,都要作为参数设置。
cal_discount可以仍然作为全局函数,但是考虑到只有用户消费的时候才用到此函数,所以还是作为类函数吧。但是参数有了变化,因为用户名,以及是否是美女,都是类的成员变量,可以在成员函数中直接访问,不需要作为参数传进来了。
其余的代码就不细说了。
那如何调用这个类呢。
c = Customer('fe_flashxu') 生成一个Customer对象c,其name是'fe_flashxu',注意,所有的调用,self代表对象本身,不需要显式设置其参数值。
is_beauty没有赋值,取默认值False。
c.recharge(500),该用户充值500元。
c.drink(with_milk=True, with_sugar=False, epay=False),消费了一次。
函数调用也可以显式的指定参数名,如with_milk=True
第二天又消费了一次,都记录了。
4、后记
类是更高层次的代码重用,封装了某类事物的属性以及功能。在各个成员函数中调用、改变、维护类的各个属性值。对于调用者非常的省心。
有些烧脑,不要焦躁,清空你的心就好了。
喝杯咖啡吧。
领取专属 10元无门槛券
私享最新 技术干货