Python 面向对象编程菜鸟实现版

原文链接

《微信背后的产品观》里,微信之父张小龙说:

对于非开发的同事,不妨也去学习一下怎么写程序。不是说真的要去做写程序的工作,而是希望可以了解一下面向对象的思路。......是否抽象到“足够抽象”的状态,如果没有抽象到这种状态,就会把事情做得很复杂,甚至会失控。

所以,除了新生代农民工里的搬砖崽,了解一下面向对象这个概念是百利无一害的。

什么是面向对象编程?

程序设计思想有面向对象(Object Oriented)和面向过程(Procedure Oriented)两大类。

面向过程是一次性的事,面向对象是关于某个主体有一堆过程的实现。比如,对于历史的描述,面向过程更像是编年体、发生一次动作就重新叙述一遍,而面向对象就像是纪传体,围绕人来展开历史故事的叙述。

那么,Python 这门编程语言又是怎么体现面向对象的呢?

Python 面向对象包括封装、继承多态这三个特性。

封装是把每个对象有关的行为封装在一个模块中;

继承是说对象2在对象1的特点基础上有延续和扩展;

多态是指,对象1和对象3在同一个动作命令下有不同的实现和处理方式。

Python可以很好的支持面向对象编程。也就是说,你可以把某个对象的一些操作封装在一个类里。通过对类的调用、继承和改写,来实现程序的复用。

下面我们来看一个非常简单的例子,有一家公司叫 “小匚科技”,员工只有三个人:甲、乙、丙。

然后我希望这个公司的每个人都有两个基础属性,一个是工号,一个是姓名,于是可以这样定义:

 ​​​​​

接着来调用,需要传入参数,姓名和工号。​​​​​​​

stuff1 = CodeStuff("甲","238493")stuff2 = CodeStuff("乙","173646")stuff3 = CodeStuff("丙","783901")
 

然后我们就可以对 stuff1、2、3后面加“.属性名”,来查询初始化属性。

图片

在定义类的属性时,属性前面加两个下划线,表示私有属性,只能通过类里面的方法来返回,如:

图片

图片

公司员工刚入职,可能只有姓名和工号的属性,但是一定还有其他动作。

定义一下,公司所有人都是正常放双休的。不同的员工,在周末做的事情不一样。可以在类的基础上,继续扩展。

此时,父类,也就是最前面定义这个 CodeStuff类,新增了 workday_act, weekend_act 两个动作。

图片

大家平时好好上班,周末好好休息。

接着,我们定义 小匚科技 不同职责的员工的动作:

# 产品,平时的工作和周末的动作:class ProductStuff(CodeStuff):    # 在括号里加上前面定义过的类,表示一种继承,具备父类里的内容,比如init不用再写一遍    # 重写父类方法    def workday_act(self):        print(self.name + "平时玩手机,发现新需求、做竞品调研、写文档、画图")
    def weekend_act(self):        print(self.name + "周末白天出去玩、晚上视频号直播倾听用户反馈")​​​​​​
# 开发人员的动作:class DevelopmentStuff(CodeStuff):    # 接着重写   假设这个开发比较上进
    def weekend_act(self):        print(self.name + "周末学极客时间,刷 LeetCode,做肩颈运动,保护颈椎")

定义好后,调用一下看看:

图片

和没有具体身份的员工来做一个对比:

图片

开发人员没有定义工作日的动作,只定义了周末的,因此工作日的行为和父类一样:

图片

这三个员工,我们都调用了同样的方法名,但是由于大家根据职位对方法进行了改写,所以,输出结果也有所不同。这就体现了多态。

希望本文能帮你建立"面向对象"的初步认知。不知道你看完以后有没有觉得不过如此,非常想动手试一下?但是又苦于之前从没接触过“编辑器”、“环境变量”这些概念。

不要急,请接着看。

在网页跑代码

我在这免费分享给大家一个不用配置复杂的安装环境、就可以跑 Python 代码的方法。

可以去找在线的数据比赛,只需要注册一个账号,就可以去比赛网站上提供的代码练习的地方来跑代码。

优点:

1 云同步:随时随地,同步在个人账号,一般也是云保存的,不用担心丢失和文件存储混乱而找不到;

2 版本隔离:在跑神经网络时,可能会遇到很多第三方库的版本不兼容问题(想要跑一下网上现有的代码的时候,会出现 TensorFlow1.0版本必须要卸载掉原有的numpy13.0,keras 又需要tensor2.3.0版本及以上)。在线上实验室,你就可以随意去折腾各种版本的包,不用担心搞乱的本地的(非要本地跑,推荐构造多个虚拟环境);

3 见贤思齐:更方便的 Fork(复制)网上优秀的代码来做模仿练习和调试。

缺点:

读取文件比较繁琐、偶尔会卡。

图片

如果在Google Colab,每次要读取文件,都需要通过以下代码进行附件的上传:​​​​​​​

from google.colab import filesuploaded = files.upload()
 

放下手机,拿起电脑,敲起好听的键盘声吧~


参考链接如下:

1 面向对象编程:https://www.liaoxuefeng.com/wiki/1016959663602400/1017495723838528

https://www.runoob.com/python/python-object.html

2 Colab链接:

https://colab.research.google.com/【手写字项目教学https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist#1】

3 阿里天池实验室:https://tianchi.aliyun.com/notebook-ai/?spm=5176.12281949.J_9711814210.11.529324489Kp1XX

图片

图片

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值