全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com)
放一下自己的联系方式,软件爱好者欢迎交流。
邮箱:greyzhang@126.com
微信:grey0612
我自己的编程可以说是从C语言起步,然后跳转到了脚本语言。虽说是现在C是我吃饭的家伙,但是现在的生活工作中脚本语言确实是给我带来了很大的收益。近段时间开始学习使用的Python给我的这种感觉特别强烈。
今天大致总结一下刚刚学习的Python面向对象编程。
面向对象,是现在的我既熟悉又陌生的一个术语。凭借肤浅的C编程技术在嵌入式行业混了两年,根深蒂固的一种思维方式是函数式的编程。这跟现在需要总结的面向对象的编程还是有很大的差异,说起来,直到现在接触Python将近一年的时间我对面向对象的编程还是很不熟悉。在我自己的生活与工作中,这种技术几乎没有使用过。
Python中,关于面向对象的知识点总结如下:
第一,优点
1,面向对象的思维方式其实在绝大多数的场合更贴近于我们本身具有的思维。
2,使用面向对象的编程方式可以把复杂的功能拆分,降低程序的复杂度。
3,面向对象的代码更加易于调试,相比之下的代码通常也会更加简洁。
4,更容易实现代码的重用。
第二,类
在Python中,面向对象的编程跟类(class)是分不开的。然而说到底,Python中的类本身也是一种对象。在Python中,所有的一切都可以看做是对象。而类包含属性和方法,其中属性可以让我联想到最初学习Python时所接触的各种数据以及数据类型,而方法则可以暂时联想到函数。简单的描述可以通过一个例子来说明,在此之前先看一下Python中类的定义方式:
class Coordinate(object):
...define attributes here...
下面来定义一个简单的类的对象:
其中,句点符号是用来访问一个对象的某个属性的。这样,__init__的方法就可以为Coordinate的对象床创建了两个属性x和y。
对于以上类的使用例子如下:
>>> ================================ RESTART ================================
>>>
>>> c = Coordinate(3,4)
>>> test = Coordinate(0,0)
>>> print c.x,test.x
3 0
从不同的教程中学习这部分的时候会看到很多种理解方式,其实,对我们来说比较重要的就是几点:第一,放心的使用,简单的类之间一般不会干涉;第二,不必要过分考虑资源的占用,Python有着比较好的垃圾回收机制;第三,注意引用的特别性。
如果尝试使用print输出创建的对象的信息,看到的其实是一个关于这个对象的描述信息:
>>> print c
<__main__.Coordinate object at 0x0000000002EDF908>
如果想输出部分我们想看到的属性,这时候需要创建__str__的方法。修改之前创建的类型如下:
调试结果如下:
>>> c = Coordinate(3,4)
>>> print c
<3,4>
上面修改的__init__以及__str__方法都是一种“内置”的方法,前后都有两个下划线是比较特殊的标记。想知道有哪些内置的方法,可以通过dir的内置函数。
>>> dir(c)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y']
接下来创建一个新的方法,不属于内置方法的方法,修改代码如下:
测试:
>>> ================================ RESTART ================================
>>>
>>> c = Coordinate(3,4)
>>> print c.Sum()
7
在MIT的计算机课程“使用Python进行编程”的面向对象编程部分,关于类的讲解比较重要的信息就是这些。都是比较基础的,接下来或许应该有继承等其他的更加高级点的用法,后面继续做相关的整理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)