一、基本概念
面向对象编程(OOP)的概念在过往的文章中已有探讨,现在我们先简单回顾。
类,是对某一类对象的抽象定义;与之相对的对象,指的是类的一个实例。方法,是类可以实现的一个操作;属性是类或者类实例的特征。以下给出一个实现“简历”的一个简单类实例代码。
#类定义,self是指类的当前实例
class resume(object):
def __init__(self,name,education):
self.name=name
self.education=education
self.point=0 #初始化得分属性
def score(self,points) #得分方法定义
self.score+=points
Amber = resume('Amber','University') #实例化
Amber.education #查询属性
Amber.score(2) #调用方法
二、对象
标准对象包括int\list\ndarray\DataFrame等,这一节我们主要介绍最后一种
import pandas as pd
import numpy as np
a=np.arange(16).reshape((4,4))
df=pd.DataFrame(a,columns=list('abcd'))
df.sum()
df.cumsum()
df+df
df.__sizeof__() #获取以字节为表示的内存使用量
三、类
__init__的重要性体现在每当对象实例化时都需要调用,其选取的参数为对象本身或者可能的其他参数。对于具体内容经常改变但是代码不常改变的情形,可以在类中定义相应的方法如下:
class FinancialInstrument(FinancialInstrument):
def get_price(self):
return self.price
def set_price(self,price):
self.price=price
但为了阻止用户直接访问和操纵实例属性,私有实例属性就派上用场
class FinancialInstrument(FinancialInstrument):
__init__(self,symbol,price):
self.symbol=symbol
self.__price=price
def get_price(self):
return self.price
def set_price(self,price):
self.price=price
注意到区别在于价格前面有两个前导下划线,这使得其定义为私有实例属性,此时用户直接访问该属性时就会出错。
四、数据模型实例——Vector类
class Vector(object):
def __init__(self,x=0,y=0,z=0):
self.x=x
self.y=y
self.z=z
def __repr__(self):
return 'Vector(%r,%r,%r)'%(self.x,self.y,self.z)
def __abs__(self):
return(self.x**2+self.y**2+self.z**2)**0.5
def __add__(self,other):
x=self.x+other.x
y=self.y+other.y
z=self.z+other.z
return Vector(x,y,z)
def __getitem__(self,i):
if i in [0,-3]:return self.x
else:raise IndexError('Index out of range.')
def __iter__(self):
for i in range(len(self)):
yield self[i]
该例展示了Python数据类可以支持的几项任务和结构。
本文为笔者个人学习《Python金融大数据分析》一书所得,若有不妥谬误之处,还望温和批评指正。