定义:
类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
局部变量:定义在方法中的变量,只作用于当前实例的类
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
类的专有方法:
- __init__ : 构造函数,在生成对象时调用
- __del__ : 析构函数,释放对象时使用
- __repr__ : 打印,转换
- __setitem__ : 按照索引赋值
- __getitem__: 按照索引获取值
- __len__: 获得长度
- __cmp__: 比较运算
- __call__: 函数调用
- __add__: 加运算
- __sub__: 减运算
- __mul__: 乘运算
- __truediv__: 除运算
- __mod__: 求余运算
__pow__: 乘方
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
和其它编程语言相比,Python 在尽可能不增加新的语法和语义的情况下加入了类机制。
Python中的类提供了面向对象编程的所有基本功能:
类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。
语法格式:
class ClassName:
<statement-1>
.
.
.
<statement-N>
简单使用:
class Ticket():
def __init__(self,checi,chufa,daoda,fdate,ftime,dtime):#构造
self.checi=checi
self.chufa=chufa
self.daoda=daoda
self.fdate=fdate
self.ftime=ftime
self.dtime=dtime
def printinf(self):
print("车次:",self.checi)
print("出发站:",self.chufa)
print("到达站:",self.daoda)
print("发车日期:",self.fdate)
print("发车时间:",self.ftime)
print("到达时间:",self.dtime)
a=Ticket("G37","西安","北京","2019-05-21","10:05","15:07")
print(a1.ftime)
a.printinf()
实现效果:
继承:
类的继承:
可以将多个类共有的方法提取到父类中,子类仅需继承父类;
基本语法为class新类名(父类1,父类2,..)
单继承与多继承区别:
Python同时支持单继承与多继承,当只有一个父类时为单继承,当存在多个父类时为多继承。
继承的性质特征:
子类会继承父类的所有的属性和方法,子类也可以覆盖父类同名的变量和方法。
调用方法执行顺序:
在调用方法时,先调用子类自己的方法,子类无,再去父类中查找。查找顺序是自左(从上往下)向右。
如果多个父类,再无共同的父类,则自左执行到顶,再往右执行。
如果有共同的父类,则自左执行到倒数第二层,再向右执行,最后再执行最顶层。
多态:
指参数的“有多种形式”、多种形态,意味着就算不知道变量所引用的对象类是什么,还是能对它进行操作,而它也会根据对象(或类)类型的不同而表现出不同的行为。
语法格式:
class 父类:
def __init__(self) #定义父类方法
.
.
.
<statement-N>
class 子类1(父类)
def __init__(self1) #定义子类方法
父类.__init__(self) #继承父类中方法
class 子类2(父类)
def __init__(self2) #定义子类方法
父类.__init__(self) #继承父类中方法
举例使用:
from prettytable import PrettyTable
class Ticket():#定义一个父类
def __init__(self,from_station,to_station,f_date,t_date,id,wu):#定义父类中的方法
self.id=id
self.from_station=from_station
self.to_station=to_station
self.f_date=f_date
self.t_date=t_date
self.wu=wu
def display(self):
print(self.id,self.from_station,self.to_station,self.f_date,self.t_date,self.wu)
class Gt(Ticket):#定义一个子类
def __init__(self,from_station,to_station,f_date,t_date,id,ydeng,edeng,wu):#定义子类中的方法
Ticket.__init__(self,from_station,to_station,f_date,t_date,id,wu)#继承父类的构造方法
self.ydeng=ydeng
self.edeng=edeng
def display(self,pt):
pt.add_row(list([self.id,self.from_station,self.to_station,self.f_date,self.t_date,self.ydeng,self.edeng,self.wu]))
class Pt(Ticket):#定义一个子类
def __init__(self,from_station,to_station,f_date,t_date,id,rwo,ywo,yzuo,wu):#定义子类中的方法
Ticket.__init__(self,from_station,to_station,f_date,t_date,id,wu)#继承父类的构造方法
self.rwo=rwo
self.ywo=ywo
self.yzuo=yzuo
def display(self,pt):
pt.add_row(list([self.id,self.from_station,self.to_station,self.f_date,self.t_date,self.rwo,self.ywo,self.yzuo,self.wu]))
g1=Gt("xian","beijing","10:00","15:00","G33",5,7,8)
g2=Gt("xian","beijing","10:00","15:00","D344",5,7,8)
t1=Pt("xian","beijing","10:00","15:00","K55",5,7,8,9)
t2=Pt("xian","beijing","10:00","15:00","T66",5,7,8,9)
pt=PrettyTable("车次 出发站 到达站 出发时间 到达时间 一等座 二等座 无座".split())
for i in [g1,g2]:
i.display(pt)
print(pt)
pt=PrettyTable("车次 出发站 到达站 出发时间 到达时间 软卧 硬卧 硬座 无座".split())
for i in [t1,t2]:
i.display(pt)
print(pt)
实现效果:
调用PrettyTable模块美化输出结果