Python內(nèi)部類:
所謂內(nèi)部類,就是在類的內(nèi)部定義的類,主要目的是為了更好的抽象現(xiàn)實(shí)世界。
例子:
汽車是一個(gè)類,汽車的底盤輪胎也可以抽象為類,將其定義到汽車內(nèi)中,而形成內(nèi)部類,
更好的描述汽車類,因?yàn)榈妆P輪胎是汽車的一部分。
內(nèi)部類實(shí)例化方法:
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),安吉企業(yè)網(wǎng)站建設(shè),安吉品牌網(wǎng)站建設(shè),網(wǎng)站定制,安吉網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,安吉網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
方法1:直接使用外部類調(diào)用內(nèi)部類
方法2:先對(duì)外部類進(jìn)行實(shí)例化,然后再實(shí)例化內(nèi)部類
out_name = outclass_name()
in_name = out_name.inclass_name()
in_name.method()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
print("I am chinese")
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
jack = People.Chinese()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
jack = People.Chinese() #外部類調(diào)用內(nèi)部類
print jack.name #外部類調(diào)用內(nèi)部類對(duì)象
另一種方法,外部類調(diào)用內(nèi)部類對(duì)象
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
ren = People() #實(shí)例化外部類
jack = ren.Chinese() #實(shí)例化內(nèi)部類
print jack.name #打印內(nèi)部類屬性
或
print People.Chinese.name
print People.Chinese().name
str(self)
構(gòu)造函數(shù)與析構(gòu)函數(shù)
構(gòu)造函數(shù):
用于初始化類的內(nèi)部狀態(tài),Python提供的構(gòu)造函數(shù)是__init__():
__init__():方法是可選的,如果不提供,python會(huì)給出一個(gè)默認(rèn)的__init__方法。
析構(gòu)函數(shù):
用于釋放對(duì)象占用的資源,python提供的析構(gòu)函數(shù)是__del__():
__del__():也是可選的,如果不提供,則python會(huì)在后臺(tái)提供默認(rèn)析構(gòu)函數(shù)。
構(gòu)造函數(shù)str
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def __str__(self):
return "This is People class"
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
ren = People() #實(shí)例化外部類
print ren #默認(rèn)執(zhí)行__str__
init(self)初始化類:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def __str__(self):
return "This is People class"
def __init__(self,c='white'): #類實(shí)例化時(shí)自動(dòng)執(zhí)行
self.color = c
self.think()
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
jack = People('green')
ren = People() #實(shí)例化外部類
print ren.color #通過對(duì)象訪問屬性是初始化后的值
print People.color #通過類訪問還是原來的值
[root@localhost 20180110]# python test1.py
I am a black
I am a thinker
30
black
yellow
析構(gòu)函數(shù)del():釋放資源
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def __str__(self):
return "This is People class"
def __init__(self,c='white'): #類實(shí)例化時(shí)自動(dòng)執(zhí)行
print ("initing...")
self.color = c
self.think()
f = open('test.py')
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
def __del__(self):
print ("del....")
self.f.close()
jack = People('green')
ren = People() #實(shí)例化外部類
print ren.color #通過對(duì)象訪問屬性是初始化后的值
print People.color #通過類訪問還是原來的值
Python采用垃圾回收機(jī)制來清理不再使用的對(duì)象;python提供gc模塊釋放不再使用的對(duì)象。
Python采用“引用計(jì)數(shù)”的算法方式來處理回收,即:當(dāng)然某個(gè)對(duì)象在其作用域內(nèi)不再被其
他對(duì)象引用的時(shí)候,python就自動(dòng)化清除對(duì)象。
gc模塊collect()可以一次性收集所有待處理的對(duì)象(gc.collect)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
class Chinese(object):
name ="I am a Chinese."
def __str__(self):
return "This is People class"
def __init__(self,c='white'): #類實(shí)例化時(shí)自動(dòng)執(zhí)行
print ("initing...")
self.color = c
self.think()
f = open('test.py')
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #調(diào)用類的方法
def test(self):
print ("this is class method")
@staticmethod #調(diào)用類的方法
def test1():
print ("this is static method")
def __del__(self):
print ("del....")
self.f.close()
print gc.collect() 如果是0是沒有回收的。
jack = People('green')
ren = People() #實(shí)例化外部類
print ren.color #通過對(duì)象訪問屬性是初始化后的值
print People.color #通過類訪問還是原來的值
繼承是面向?qū)ο蟮闹匾匦灾唬?
繼承關(guān)系繼承是相對(duì)兩個(gè)類而言的父子關(guān)系
子類繼承了父類的所有公有屬性和方法,
繼承,實(shí)現(xiàn)了代碼重用
繼承可以重用已經(jīng)存在的數(shù)據(jù)和行為,減少代碼的重復(fù)編寫,
Python在類名后使用一對(duì)括號(hào)來表示繼承關(guān)系,括號(hào)中的即類為父類
class Myclass(ParentClass),
如果父類定義了__init__方法,子類必須顯式調(diào)用父類的__init__方法,
ParentClass.__init__(self,[args...])
如果子類需要擴(kuò)展父類的行為,可以添加__init__方法的參數(shù).
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
class Chinese(People):
pass
cn = Chinese()
print cn.color
cn.think()
父類中有構(gòu)造函數(shù):
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def __init__(self):
print "Init..."
self.dwell = 'Earth'
def think(self):
print "I am a %s " % self.color
print ("I am a thinker")
class Chinese(People):
pass
cn = Chinese()
print cn.dwell
cn.think()
參數(shù)大于兩個(gè):
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def __init__(self,c):
print "Init..."
self.dwell = 'Earth'
def think(self):
print "I am a %s " % self.color
print ("I am a thinker")
class Chinese(People):
def __init__(self):
People.__init__(self,'red')
pass
cn = Chinese()
class A(object):
def __init__(self):
print "enter A"
print "leave A"
class B(object):
def __init__(self):
print "enter B"
super(B,self),__init__()
print "leave B"
b = B()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def __init__(self,c):
print "Init..."
self.dwell = 'Earth'
def think(self):
print "I am a %s " % self.color
print ("I am a thinker")
class Chinese(People):
def __init__(self):
super(Chinese,self).__init__('red')
pass
cn = Chinese()
cn.think()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def __init__(self,c):
print "Init..."
self.dwell = 'Earth'
def think(self):
print "I am a %s " % self.color
print ("I am a thinker")
class Chinese(People):
def __init__(self):
super(Chinese,self).__init__('red')
def talk(self):
print "I like taking."
cn = Chinese()
cn.think()
cn.talk()
Python支持多重繼承,第一個(gè)類可以繼承多個(gè)父類
語法:
class class_name(Parent_c1,Parent_c2,...)
注意:
當(dāng)父類中出現(xiàn)多個(gè)自定義的__init__的方法時(shí),
多重繼承,只執(zhí)行第一個(gè)累的__init_方法,其他不執(zhí)行。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
def __init__(self):
print "Init..."
self.dwell = 'Earth'
def think(self):
print "I am a %s " % self.color
print ("My home is %s ") % self.dwell
class Martian(object):
color = 'red'
def __init__(self):
self.dwell = 'Martian'
class Chinese(People,Martian):
def __init__(self):
People.__init__(self)
cn = Chinese()
cn.think()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
def __init__(self):
self.dwell = 'Earth'
self.color = 'yellow'
def think(self):
print "I am a %s " % self.color
print ("My home is %s ") % self.dwell
class Martian(object):
color = 'red'
def __init__(self):
self.dwell = 'Martian'
def talk(self):
print "I like talking"
class Chinese(Martian,People):
def __init__(self):
People.__init__(self)
cn = Chinese()
cn.think()
cn.talk()