Python面向对象OOP

时间:2023-03-08 16:49:21

一 OOP

    与C++和Java一样,Python同样具有OOP设计。

过程式:从前到后,一条一条,机器能接受的顺序性方式;方式大概为“首先你应该做什么,第二应该做什么,高级点的做点假设如果遇到什么情况要做什么,或者一件事情要做多少多少遍,… …,”

OOP式:从“类与对象”方式来抽象和理解世界。例如首先物体(Object)大概可以分为“生物”与“非生物”,“生物”又能分为“人、动物、植物”等,“人”又分为“男人,女人”等。。。大自然在世界之巅,不断分类设定。类似于“族谱”,上下之间能“继承”。

类与对象。类是抽象的,是一群的概述,对象是具体的,独立的,例如我存在一个独立的人。对象拥有所在类的属性和方法,同样拥有属于自己对象的属性(方法)。

现实世界中,类拥有属性(attribute)和行为(action);抽象数据中,类拥有数据(data)和方法(method)。类之间,存在继承(inheritance)与改良,类与对象之间,存在实例化。在实例化之后,对象能够在继承的类成员之外,增加属于自己的数据成员。

二  Python OOP

末 Python 中的坑

Python 很强大,坑也不少,一个一个填吧。

一 Python 处理中文及编码方式

    Python3.0之前,由于编码的缘故,处理中文夹杂情况,十分痛苦。要想彻底让它不是问题,第一,理解编码方式之间转换;第二,几个实际例子在手。

二 Python基础语法

1. 浅拷贝赋值,传值与传地址调用

首先看两个例子,关于一个函数参数为int和list两种类型时的不同操作,以增加++一个值为例。

# 传值value参数

a = 1
def  change_integer(a):
    a = a + 1
    return a

# 传地址address参数
b = [1,2,3]
def change_list(b):
    b[0] = b[0] + 1
    return b

# test value
print change_integer(a)
print 'a = ',a

print change_list(b)
print 'b[0] = ',b[0]

#Result:
>a = 1
>b[0] = 2

第一个integer例子中,将一个int类型变量传递给函数,原整型变量a不发生变化。

第二个list例子中,将一个list类型变量传递给函数,原listb会发生变化。

原因在于,对于基本数据类型(例如int),函数会在内存中复制一个新的变量,从而不影响原来变量,这叫“值传递”;

对于list来说,并不属于基本变量,函数传递的是一个指针,指向序列在内存中的地址,从而影响原来的值,称为“指针传递”。

同理,对于matrix或者array类型的数据,也属于非基本类型,因此array_a = array_b这样行为,array_b做操作时同样会影响到array_a,特别注意!!