python面向对象

python面向对象,第1张

概述python面向对象目录:1.类的定义和使用2.类的封装3.类的继承4.多态 1.类的定义和使用查、增加、修改、删除、初始化方法、实例化__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法#python 类的定义和使用class Ticket():#__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法#self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。#self 代表的是类的实例,代表当前对象的地址def __init__(self,checi,fstation,tstation,fdate,ftime,ttime):self.checi=checiself.fstation=fstationself.tstation=tstationself.fdate=fdateself.ftime=ftimeself.ttime=ttimedef printinf(self):print("车次",self.checi)print("出发站",self.fstation)print("到达站",self.tstation)print("出发时期",self.fdate)print("出发时间",self.ftime)print("到达时间",self.ttime)#实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。#以下使用类的名称 Ticket 来实例化,并通过 __init__ 方法接收参数。a1=Ticket("K111","北京","西安","2019-01-18","12:00","16:00") #创建 Ticket 类的第一个对象(也即实例化类)a2=Ticket("K112","北京","西安","2019-01-20","12:00","16:00") #创建 Ticket 类的第二个对象print(type(a1),a1) #print(a1.fdate) ##使用点号 . 来访问对象的属性a1.printinf()a2.printinf()#可以添加,删除,修改类的属性# 添加一个 'train' 属性a1.code = "train"print(a1.code) #train# 修改 'a1.ftime' 属性a1.ftime = "10:00"print(a1.ftime) #10:00# 删除 'a1.ttime' 属性del a1.ttimeprint(a1.ttime) #报错:AttributeError: 'Ticket' object has no attribute 'ttime'2.类的封装类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问在python中用双下划线的方式实现隐藏属性(设置成私有的)#python 类的封装import requestsimport shelveimport pickleclass Station():def __init__(self,code,cn,qp,jp):self.__code=codeself.__cn=cnself.__qp=qp #私有属性,仅类的内部使用,外部无法调用self.__jp=jpdef getcode(self,s1):if s1 in [self.__code,self.__cn,self.__jp]:return self.__codedef getCn(self):return self.__cndef printinfo(self):print("code:{:<10}cn:{:<10}gp:{:<25}jp:{:<20}".format(self.__code,self.__cn,self.__gp,self.__jp))try:with open("stations.txt","rb") as f:txt=pickle.load(f)except Exception as e:url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"txt=requests.get(url).textwith open("stations.txt","wb") as f:pickle.dump(txt,f)inf=txt[:-2].split("@")[1:]stations=[]for record in inf:rlist=record.split("|")stations.append(Station(rlist[2],rlist[1],rlist[3],rlist[4])) #直接将类的对象添加到列表中def getstation(str):while True:fs=input("%s站:"%str)fstations=list(filter(lambda i:i.getcode(fs),stations))if len(fstations)==0:print("错误的输入!")continueelif len(fstations)==1:print("您输入的%s是%s:"%(str,fstations[0].getCn()))elif len(fstations)>1:print("检测到比较多的车站信息,提供下列多种选择!")for i in range(len(fstations)):print((i+1),"、",fstations[i].getCn(),sep="")sel=int(input("请选择:")) - 1print("您输入的{}是{}".format(str,fstations[sel].getCn()))breakcfz=getstation("出发")ddz=getstation("到达")3.类的继承面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。父类的属性和方法子类可以使用#python 类的继承#面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。#通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。from prettytable import PrettyTableclass Ticket():def __init__(self,from_station,to_station,from_time,to_time,id,wu):self.from_station=from_stationself.to_station=to_stationself.from_time=from_timeself.to_time=to_timeself.id=idself.wu=wudef display(self):print(self.id,self.from_station,self.to_station,self.from_time,self.to_time)#继承Ticket类,继承有什么好处?最大的好处是子类获得了父类的全部属性及功能class Gd(Ticket):def __init__(self,from_station,to_station,from_time,to_time,id,yideng,erdeng,wu):Ticket.__init__(self,from_station,to_station,from_time,to_time,id,wu)self.yideng=yidengself.erdeng=erdengdef insert(self):ptable=PrettyTable("车次 出发站 到达站 出发时间 到达时间 一等座 二等座 无座".split())ptable.add_row([self.id,self.from_station,self.to_station,self.from_time,self.to_time,self.yideng,self.erdeng,self.wu])print(ptable)class Tkz(Ticket):def __init__(self,from_station,to_station,from_time,to_time,id,ruanw,yingw,yingzuo,wu):Ticket.__init__(self,from_station,to_station,from_time,to_time,id,wu)self.ruanw=ruanwself.yingw=yingwself.yingzuo=yingzuodef insert(self):ptable=PrettyTable("车次 出发站 到达站 出发时间 到达时间 软卧 硬卧 硬座 无座".split())ptable.add_row([self.id,self.from_station,self.to_station,self.from_time,self.to_time,self.ruanw,self.yingw,self.yingzuo,self.wu])print(ptable)g1=Gd("北京","上海","10:00","18:00","G11",2,3,4)g2=Gd("北京","西安","10:00","18:00","G22",2,3,4)t1=Tkz("北京","西安","12:00","18:00","K112",4,3,4,6)t2=Tkz("北京","郑州","11:00","18:00","K111",4,3,5,6)g1.insert()g2.insert()4.多态多态:同一父类的不同子类可以为同名方法执行不同的 *** 作#python 类的多态from prettytable import PrettyTableclass Ticket():def __init__(self,from_station,to_station,from_time,to_time,id,wu):self.from_station=from_stationself.to_station=to_stationself.from_time=from_timeself.to_time=to_timeself.id=idself.wu=wudef display(self):print(self.id,self.from_station,self.to_station,self.from_time,self.to_time)class Gd(Tick

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
======((((((a1=Ticket(,,,,,) a2=Ticket(,,) (type(a1),a1) (a1.fdate) a1.code = (a1.code) a1.ftime = (a1.ftime) (a1.ttime)

2.类的封装

类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问

在python中用双下划线的方式实现隐藏属性(设置成私有的)

===qp self.= s1 [self.,self.,self. self. self. (.format(self.,self.,self.,===,=txt[:-2].split()[1= record =record.split(2],rList[1],rList[3],rList[4])) =input(%=List(filter( len(fstations)==( len(fstations)==1(% len(fstations)>1( i ((i+1),,fstations[i].getCn(),sep==int(input()) - 1 (cfz=getstation(<span >"<span >出发<span >"<span >)
ddz
=getstation(<span >"
<span >到达
<span >"
)

3.类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。

父类的属性和方法子类可以使用

prettytable ====== ===prettytable( ===</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff"&gt;def</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt; insert(self): p<a href="https://m.jb51.cc/tag/table/" target="_blank" >table</a></span>=<a href="https://www.jb51.cc/tag/prettytable/" target="_blank" >prettytable</a>(<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;车次 出发站 到达站 出发<a href="https://m.jb51.cc/tag/shijian/" target="_blank" >时间</a> 到达<a href="https://m.jb51.cc/tag/shijian/" target="_blank" >时间</a> 软卧 硬卧 硬座 无座</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt;.sp<a href="https://m.jb51.cc/tag/li/" target="_blank" >li</a>t()) p<a href="https://m.jb51.cc/tag/table/" target="_blank" >table</a>.add_row([self.<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>,self.ruanw,self.yingw,self.yingzuo,self.wu]) </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff"&gt;print</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt;(p<a href="https://m.jb51.cc/tag/table/" target="_blank" >table</a>)

g1=Gd(<span >"<span >北京<span >",<span >"<span >上海<span >",<span >"<span >10:00<span >",<span >"<span >18:00<span >",<span >"<span >G11<span >",2,3,4<span >)
g2=Gd(<span >"<span >北京<span >",<span >"<span >G22<span >",4<span >)
t1=Tkz(<span >"<span >北京<span >",<span >"<span >K112<span >",4,6<span >)
t2=Tkz(<span >"<span >北京<span >",<span >"<span >郑州<span >",<span >"<span >11:00<span >",<span >"<span >K111<span >",5,6<span >)
g1.insert()
g2.insert()

4.多态

<span >from prettytable <span >import<span > prettytable
<span >class<span > Ticket():
<span >def <span >init<span >(self,self.to_time)
<span >class<span > Gd(Ticket):
<span >def <span >init<span >(self,wu)
self.yIDeng=<span >yIDeng
self.erdeng=<span >erdeng
<span >def<span > display(self):
ptable=prettytable(<span >"<span >车次 出发站 到达站 出发时间 到达时间 一等座 二等座 无座<span >"<span >.split())
ptable.add_row([self.ID,wu)
self.ruanw=<span >ruanw
self.yingw=<span >yingw
self.yingzuo=<span >yingzuo

</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff"&gt;def</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt; <a href="https://www.jb51.cc/tag/dis/" target="_blank" >dis</a>play(self):    p<a href="https://m.jb51.cc/tag/table/" target="_blank" >table</a></span>=<a href="https://www.jb51.cc/tag/prettytable/" target="_blank" >prettytable</a>(<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;车次 出发站 到达站 出发<a href="https://m.jb51.cc/tag/shijian/" target="_blank" >时间</a> 到达<a href="https://m.jb51.cc/tag/shijian/" target="_blank" >时间</a> 软卧 硬卧 硬座 无座</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt;.sp<a href="https://m.jb51.cc/tag/li/" target="_blank" >li</a>t())    p<a href="https://m.jb51.cc/tag/table/" target="_blank" >table</a>.add_row([self.<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>,6<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000"&gt;)

<span >for i <span >in<span > [g1,g2,t1,t2]:
i.display()

通过上面的代码可以看到,不同的子类子类以及父类都有"display"方法,在代码末尾不同的对象调用相同的方法名,但结果却显示不同,这就是多态。

总结

以上是内存溢出为你收集整理的python面向对象全部内容,希望文章能够帮你解决python面向对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存