查看原文
其他

Python面向对象编程从零开始(3)—— 小姐姐请客上篇

2017-06-09 王大伟 Python爱好者社区

(点击上方Python爱好者社区,可快速关注)

作者:王大伟

博客专栏:https://www.hellobi.com/u/wangdawei/articles

Python爱好者社区  唯一小编  

(文末有新福利 

前言

好了,接着之前的故事继续。

前文传送门:https://ask.hellobi.com/blog/wangdawei/8429                        https://ask.hellobi.com/blog/wangdawei/8446

上文说到我和小姐姐相互自我介绍了

今天我们继续讲我与小姐姐的故事:

self的作用

class Car:
   
   def drive(self):
       print('我正在开车')
   
   def turnover(self):
       print('翻车了')
       
   def introduce(self):
       print('%s的年龄是:%d,特点是:%s'%(self.name,self.age,self.features))
       
#创建一个对象
xiao_jie_jie=Car()

xiao_jie_jie.drive()#调用xiao_jie_jie指向的对象的方法
xiao_jie_jie.turnover()


#添加属性,属性就是变量
xiao_jie_jie.name = '王梦瑶'
xiao_jie_jie.age = 20
xiao_jie_jie.features = '北方有佳人 遗世而独立 一顾倾人城 再顾倾人国'

xiao_jie_jie.introduce()

myself = Car()

myself.name = '王大伟'
myself.age = 18
myself.features = '玉树临风 英俊潇洒 风流倜傥 貌似潘安 形貌昳丽 器宇轩昂 一表人才 雄姿英发 风度翩翩'

myself.introduce()

以上是昨天结束时的代码,其实我们昨天已经提到了self这个参数


注意到,在定义类Car中的三个方法(drive  turnover introduce)时,方法里的参数都是self

注意:self是创建类中的方法时必填的参数,通过哪个对象调用的方法,则self就是哪个对象

例如:

xiao_jie_jie=Car()

用类Car()创造了一个对象xiao_jie_jie

在之后的小姐姐自我介绍中:

xiao_jie_jie.introduce()

小姐姐这个对象调用了introduce()方法来自我介绍(类中定义的函数叫做方法),则


这里的self系统会调用xiao_jie_jie的name,age,feartures属性作为输入,由print某种格式输出作为自我介绍内容。

则自我介绍内容(输出)为:


self也可以写为任意一个变量(非系统关键字),但是大家潜规则(默认)使用self

为了大家相互看代码,交接工作更顺利吧~

面向对象优势初体现——小姐姐要秀厨艺

自我介绍结束,我说要请小姐姐吃饭,然后看电影,然后去唱歌,然后。。。(请自行脑补)


o(︶︿︶)o 唉,这不是常见的谈恋爱套路么

不想落入俗套?

小姐姐给了我一个惊喜


小姐姐说要给我做饭!!!

我脑中的:



现实中小姐姐要做的:



我就:


不过转念一想,小姐姐煮泡面至少也是她的心意啊,说不定下次就是爱心便当了!

于是她请我去她家吃饭。。。

买来泡面——__init__()方法、泡面状态——__str__()方法

小姐姐在附近诺大的超市轻车熟路买到了泡面(语文题   Q: 请揣摩作者文中"“偌大“和“轻车熟路”二词的含义?A:”偌大“体现了超市很大,和“轻车熟路”买到泡面形成对比,暗含小姐姐经常过来买泡面吃,呼应上文小姐姐选择煮泡面请我吃,更体现了小姐姐长期不健康的饮食生活。)

买完泡面,我们来到小姐姐家(这里就她一个人住)

她开始下面给我吃。


class Cook_instant_noodles:
   
   def __init__(self):
       self.cookedString = '生的'
       self.cookedLevel = 0

首先定义一个类叫做Cook_instant_noodles(中文含义:煮泡面)

class Cook_instant_noodles:
   
   def __init__(self):
       self.cookedState = '生的'
       self.cookedLevel = 0
       
   def __str__(self):
       return '泡面状态:%s(%d)'%(self.cookedState,self.cookedLevel)

注意:这里新定义了两个方法(在类中使用def定义),名字分别是__init__()和__str__()方法。

__init__()方法:称为构造方法。在类创建对象时,自动执行,进行初始化操作。

__str__()方法:打印对象相关内容时候需要用到,我们可以简单理解为输出作用。

在__init__()方法中,定义了泡面初试状态是生的,泡面煮熟状态时0,即还没开始煮泡面。

在__str__()方法中定义泡面状态的返回。

def cook(self,cooked_time):
       if cooked_time >= 0 and cooked_time < 3:
           self.cookedState = '还没熟'
       elif cooked_time >= 3 and cooked_time < 5:
           self.cookedState = '半生不熟'
       elif cooked_time >= 5 and cooked_time < 8:
           self.cookedState = '煮熟了'
       elif cooked_time >= 8:
           self.cookedState = '煮糊了'

在煮泡面类里定义一个方法cook()表示煮泡面时泡面的状态。

注意:为了简化,这里状态只考虑煮的时间,不考虑火力大小等其他因素。

所以,在方法中传入参数cooked_time

接下来,创建了一个泡面对象

instant_noodles = Cook_instant_noodles()

注意:这个煮泡面对象命名为instant_noodles,是用Cook_instant_noodles()类创建的对象,所以这个对象可以调用该类中的方法cook()

我们可以通过:

print(instant_noodles)

来观察泡面的状态

#开始煮泡面
instant_noodles.cook(1)

创建出的instant_noodles这个对象要调用类中的方法cook(),将参数 1 传入cooked_time,代表煮了一分钟(我们约定的单位)

class Cook_instant_noodles:
   
   def __init__(self):
       self.cookedState = '生的'
       self.cookedLevel = 0
       
   def __str__(self):
       return '泡面状态:%s(%d)'%(self.cookedState,self.cookedLevel)
   
   def cook(self,cooked_time):
       if cooked_time >= 0 and cooked_time < 3:
           self.cookedState = '还没熟'
       elif cooked_time >= 3 and cooked_time < 5:
           self.cookedState = '半生不熟'
       elif cooked_time >= 5 and cooked_time < 8:
           self.cookedState = '煮熟了'
       elif cooked_time >= 8:
           self.cookedState = '煮糊了'
   
#创建了一个泡面对象
instant_noodles = Cook_instant_noodles()

print(instant_noodles)

#开始煮泡面
instant_noodles.cook(1)

运行一下完整程序

结果如下:


说明煮了一分钟还没熟(这不是废话么,掀桌)

接下来小姐姐就给我煮面啦~

小姐姐告诉我一个事实:她以前都是用开水泡面的,没煮过泡面(害怕火)

所以她不知道煮多久才熟。。。

我想:我的天!这也行?

我说:那你试试吧,反正你买了好几包(她买了这么多泡面估计准备吃一周,好像被我发现了她的意图,害羞的点了点头

于是,小姐姐开始尝试

instant_noodles.cook(20)

第一次,她煮了20分钟(她果然没有生活经验),程序运行结果显示:


这。。不科学啊

于是我决定修改代码。。

小姐姐最后煮面煮的怎么样了?想了解我与小姐姐的更多故事,请持续关注。

新福利:面包君 6月20日在Hellobi Live直播 《互联网金融行业的大数据应用

内容:1、互联网金融的发展历程  2、大数据在互联网金融的应用 3、 征信体系介绍 4、风控反作弊欺诈模型运用 5、互联网金融公司贷款授信 6、保险定价策略分析 7、量化投资应用 

付费参加方式:阅读原文或下图扫码参加

免费参加方式:关注公众号Python爱好者社区,在菜单栏点击免费听课参加活动

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存