原来那边把object oriented翻译成“物件导向“,感觉比“面向对象“这个翻译还要好|∀` )
不过python其实既不是完全面向对象也不是完全面向过程的,如果要理解透彻的话确实是参考一下完全面向过程(C)和完全面向对象(C#/java)语言比较好。
比如在C语言的字符串操作,是通过string.h下的一系列函数实现的。比如我要连接“nmb“和“xd“两个字符串,写法是这样的
char2[0,6] s1 = “nmb“;
char1[0,3] s2 = “xd“;
strcat(s1,s2);
这样s1的值就成了 “nmbxd“
但是想必po也知道了,这在python里只需要一个+号就可以了
这是因为python的str就是一个类,加法运算符实际上是调用了它的__add__方法(函数),不过python并不强制必须面向对象,于是以下三种写法结果是相同的
'nmb'+'xd'
'nmb'.__add__('xd')
str.__add__('nmb','xd') #这就是面向过程的写法
__add__方法就是python约定的用于重载加法算符的方法,因此我们自己写一个class 然后def 这个方法,就可以在自己定义的这个类上直接使用加法算符进行运算,po可以试试照着这个思路来实现一个支持基本数学算符的 分数/复数 之类的class,比如要实现分数,就需要两个字段来存储分子和分母,复数就是分别存储实部和虚部,然后分别def __add__
__sub__之类的运算符方法,这样自己实现的class也可以直接使用加减乘除符号进行数学运算,这就是类的方法表示带来的遍历,对于面向过程的情况,就没法这样实现,因为函数和数据类型不是绑定在一起的,而和一个class绑定的函数(即它的第一个参数是self)就叫做这个class的method