Python面向?qū)ο蟪绦蛟O(shè)計(jì)類變量與成員變量、類方法與成員方法用法分析
本文實(shí)例講述了Python面向?qū)ο蟪绦蛟O(shè)計(jì)類變量與成員變量、類方法與成員方法用法。分享給大家供大家參考,具體如下:
類變量與成員變量
在類中聲明的變量我們稱之為類變量[靜態(tài)成員變量],
在init()函數(shù)中聲明的變量并且綁定在實(shí)例上的變量我們稱之為成員變量。
類變量直接可以通過(guò)類名來(lái)調(diào)用。
1、若類變量與成員同時(shí)存在并且同名
使用對(duì)象來(lái)調(diào)用的時(shí)候,獲取的結(jié)果是成員變量的值,
使用類名來(lái)調(diào)用,獲取的是類變量的值。
2、若類變量存在,成員變量不存在,
使用對(duì)象來(lái)調(diào)用的時(shí)候,它首先尋找成員變量,
如果成員變量不存在。則去尋找類變量。
3、若類變量不存在,成員變量存在:
使用類名來(lái)調(diào)用,則會(huì)報(bào)錯(cuò)
總結(jié):
類變量通過(guò)類名或者對(duì)象來(lái)調(diào)用都不會(huì)報(bào)錯(cuò),但是成員變量只能通過(guò)對(duì)象來(lái)調(diào)用。
通過(guò)對(duì)象來(lái)修改類屬性的時(shí)候,只能作用到對(duì)象自己本身,作用不到類,
若是通過(guò)類名來(lái)修改類屬性,則只對(duì)類變量的值進(jìn)行修改。
class Person(object):
# 類變量
name = "haha"
age = "19"
height = 170
def __init__(self,name,age,weight):
# 成員變量
self.name = name
self.age = age
self.weight = weight
def sayHeight(self):
print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()
輸出:
xiaoming
haha
190
170
*********
200
190
190
類方法與成員方法
類方法,成員方法
類方法:使用類名來(lái)調(diào)用的方法
成員方法:使用對(duì)象來(lái)調(diào)用的方法
若一個(gè)方法定義在類中,但是沒(méi)有參數(shù)[一般默認(rèn)self],此時(shí)我們只能通過(guò)類名來(lái)調(diào)用
若我們需要使用到一個(gè)類的對(duì)象,首先要實(shí)例化。
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def say(self):
print("I am %s, I am %d year old"%(self.name,self.age))
def sayHello():
print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()
輸出:
I am xiaoming, I am 19 year old
hello I am class function
類方法與靜態(tài)方法
靜態(tài)方法:
當(dāng)調(diào)用此方法時(shí),不會(huì)將類的實(shí)例傳遞給它。
在類中定義的函數(shù)。
無(wú)需實(shí)例化類,就可以調(diào)用。它的定義在繼承中,是不可變的。
類方法:
當(dāng)調(diào)用此方法時(shí),將函數(shù)所屬的類作為第一個(gè)參數(shù)傳遞。
class A(object):
def foo(self, x):
print("executing foo(%s, %s)" % (self, x))
@classmethod
def class_foo(cls, x):
print("executing class_foo(%s, %s)" % (cls, x))
@staticmethod
def static_foo(x):
print("executing static_foo(%s)" % x)
a = A()
# 調(diào)用foo函數(shù),參數(shù)傳入1
a.foo(1)
# 調(diào)用class_foo,參數(shù)傳入1
A.class_foo(1)
# 調(diào)用static_foo,參數(shù)傳入1
A.static_foo(1)
a.static_foo(1):
輸出:
executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)
下劃線
下劃線定義特殊的方法,一般情況下是系統(tǒng)定義名字,
如:
__init()__、__del()__
前雙下劃線(age):表示私有類型的變量(privated),只能在本類中進(jìn)行訪問(wèn),外界不能直接訪問(wèn)。如__age.
單下劃線(_age):以單下劃線開(kāi)頭的表示保護(hù)類型變量(protected),
保護(hù)類型的變量只允許本身以及子類訪問(wèn),不能用于from module import *
[使用單下劃線開(kāi)頭的時(shí)候,雖然變量能夠直接被訪問(wèn),但是請(qǐng)把變量視為一個(gè)保護(hù)類型的變量,盡量不要去訪問(wèn)。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有變量,私有方法原理與用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之繼承、多態(tài)原理與用法詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之靜態(tài)方法、類方法、屬性方法原理與用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之類和對(duì)象、實(shí)例變量、類變量用法分析
- Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)之類的繼承和多態(tài)詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的多態(tài)用法詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類的封裝與繼承用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)用法分析
- Python面向?qū)ο蟮某绦蛟O(shè)計(jì)詳情
相關(guān)文章
PyCharm出現(xiàn)Error:Python?packaging?tool?'setuptools&apo
這篇文章主要給大家介紹了關(guān)于PyCharm出現(xiàn)Error:Python?packaging?tool?'setuptools'?not?found的解決辦法,文中通過(guò)圖文及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
python Matplotlib數(shù)據(jù)可視化(2):詳解三大容器對(duì)象與常用設(shè)置
這篇文章主要介紹了python Matplotlib三大容器對(duì)象與常用設(shè)置的相關(guān)資料,幫助大家更好的學(xué)習(xí)和使用Matplotlib庫(kù)的用法,感興趣的朋友可以了解下2020-09-09
pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法
今天小編就為大家分享一篇pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python中使用裝飾器和元編程實(shí)現(xiàn)結(jié)構(gòu)體類實(shí)例
Python中使用裝飾器和元編程實(shí)現(xiàn)結(jié)構(gòu)體類實(shí)例,本文的方法算是一種Python的黑魔法技術(shù),并非Python的常規(guī)寫法,需要的朋友可以參考下2015-01-01
python使用PIL把透明背景圖片轉(zhuǎn)成白色背景的示例代碼
當(dāng)我們?cè)诓杉恍﹫D片的時(shí)候,這些圖片的背景經(jīng)常是透明的,但是如何把透明背景轉(zhuǎn)成白色背景呢,接下來(lái)就給大家解決這個(gè)問(wèn)題,本文主要介紹了python使用PIL把透明背景圖片轉(zhuǎn)成白色背景,需要的朋友可以參考下2023-08-08
django ModelForm修改顯示縮略圖 imagefield類型的實(shí)例
今天小編就為大家分享一篇django ModelForm修改顯示縮略圖 imagefield類型的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python實(shí)現(xiàn)讀取郵箱中的郵件功能示例【含文本及附件】
這篇文章主要介紹了Python實(shí)現(xiàn)讀取郵箱中的郵件功能,可讀取郵件文本及附件的功能,涉及Python針對(duì)郵件的獲取、分析、保存等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè)
這篇文章主要介紹了使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè),應(yīng)用機(jī)器學(xué)習(xí)的工具來(lái)預(yù)測(cè)哪些乘客在悲劇中幸存下來(lái)2023-03-03

