首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

六撩Python

世界是物质的,但最终是精神的。

--爱因斯坦

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、后记

类是更高层次的代码重用,封装了某类事物的属性以及功能。在各个成员函数中调用、改变、维护类的各个属性值。对于调用者非常的省心。

有些烧脑,不要焦躁,清空你的心就好了。

喝杯咖啡吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180115G0DH2100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券