python 的类变量和对象变量
生活随笔
收集整理的這篇文章主要介紹了
python 的类变量和对象变量
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
python是一種解釋性的語言,任何變量可以在使用的時(shí)候才聲明以及定義,也可以在程序運(yùn)行的任何位置進(jìn)行聲明和定義新的變量。
class Man(object):
#直接定義的類的變量,屬于類
#其中 gender, avg_height為基本數(shù)據(jù)類型,immutable
#lis為列表類型,為mutable的
gender = 'male'
avg_height = 1.75
lis = ['hello', 'world']
def __init__(self, name):
self.name = name #name在類的構(gòu)造函數(shù)中定義,是屬于對(duì)象的變量
a = Man('jason')
b = Man('tom')
#通過一個(gè)對(duì)象a訪問一個(gè)變量x,變量的查找過程是這樣的:
#先在對(duì)象自身的__dict__中查找是否有x,如果有則返回,否則進(jìn)入對(duì)象a所屬的類A的
#__dict__中進(jìn)行查找
#對(duì)象a試圖修改一個(gè)屬于類的 immutable的變量,則python會(huì)在內(nèi)存中為對(duì)象a
#新建一個(gè)gender變量,此時(shí)a就具有了屬于自己的gender變量
a.gender = 'female'
#對(duì)象b試圖修改一個(gè)mutable的變量,則python找到類Man的__dict__中的變量lis,
#由于lis是可以修改的,因此直接進(jìn)行修改,而不會(huì)給b新生成一個(gè)變量。類Man以及類Man
#的所有對(duì)象都公用這一個(gè)lis
b.lis = ['fuck', 'world']
print a.__dict__ #屬于a的變量,有 name, gender
print b.__dict__ #屬于b的變量,只有name
print Man.__dict__ #屬于類Man的變量,有 gender,avg_height,lis,但是不包括 name
#name是屬于對(duì)象的變量
Man.t = 'test' #此時(shí)Man的變量又多了t,但是對(duì)象a和b中沒有變量t。
#(這里可以看出,對(duì)象的變量和類的變量是分開的)
print a.gender #female
print b.gender #male
print a.lis #['fuck', 'world']
print b.lis #['fuck', 'world']
a.addr = '182.109.23.1' #給對(duì)象a定義一個(gè)變量,對(duì)象b和類Man中都不會(huì)出現(xiàn)(解釋性語言好隨性。。)
需要注意,類的變量(屬性)和對(duì)象的變量(屬性)是“獨(dú)立”的,但在通過一個(gè)對(duì)象查找一個(gè)變量的時(shí)候,會(huì)現(xiàn)在改對(duì)象自身的__dict__中查找,如果找不到,則進(jìn)入該對(duì)象代表的類的__dict__中進(jìn)行查找。
注意 mutable, immutable變量的區(qū)別!這會(huì)導(dǎo)致python是否會(huì)在內(nèi)存中為某對(duì)象新申請(qǐng)內(nèi)存定義該變量。
可以在程序的任何位置給類或者對(duì)象定義新的變量
總結(jié)
以上是生活随笔為你收集整理的python 的类变量和对象变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: update empty content
- 下一篇: 前小米9号员工创业 不到2个月获黎万强两