Python中类方法、类实例方法、静态方法,私有属性和私有方法有何区别?
類方法
是類對象的方法,在定義時需要在上方使用 @classmethod 進(jìn)行裝飾,形參為cls,表示類對象,類對象和實(shí)例對象都可調(diào)用。
使用格式:
對類的屬性進(jìn)行操作,就要用類的方法。
@classmethoddef 方法名(cls)調(diào)用類方法
類名.方法名()
代碼:
class Student:money = 10 # 類的屬性 內(nèi)存中只有一份,無論你創(chuàng)建多少個對象,把數(shù)據(jù)共享給對象# 修改類的屬性,類的方法@classmethoddef change(cls):cls.money -= 2 # 修改類的屬性 cls 類屬性print(cls.money)one = Student() # 類名.方法名() 推薦 Student.change() two = Student() # 對象.方法名() two.change()測試結(jié)果:
8
6
靜態(tài)方法
是一個任意函數(shù),在其上方使用 @staticmethod 進(jìn)行裝飾,可以用對象直接調(diào)用,靜態(tài)方法實(shí)際上跟該類沒有太大關(guān)系。沒有傳遞一個對象self,也沒有傳遞類對象cls
節(jié)省內(nèi)存資源 不用傳遞參數(shù)。
使用格式:
@staticmethoddef 方法名()代碼:
class Welcome:@staticmethod # 靜態(tài)方法,不用傳遞參數(shù)def show():print("*" * 10)print("歡迎使用該后臺系統(tǒng)")# 靜態(tài)方法的調(diào)用 # 類名.方法名() Welcome.show()類實(shí)例方法
是類實(shí)例化對象的方法,只有實(shí)例對象可以調(diào)用,形參為self,指代對象本身;
代碼:
class Car:def __init__(self, name, loss): # loss [價格,油耗,公里數(shù)]self.name = nameself.loss = lossdef getName(self):return self.namedef getPrice(self):# 獲取汽車價格return self.loss[0]def getLoss(self):# 獲取汽車損耗值return self.loss[1] * self.loss[2]Bmw = Car("寶馬", [60, 9, 500]) # 實(shí)例化一個寶馬車對象 print(getattr(Bmw, "name")) # 使用getattr()傳入對象名字,屬性值。 print(dir(Bmw)) # 獲Bmw所有的屬性和方法運(yùn)行結(jié)果:
寶馬
[‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’,
‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’,
‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’,
‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’,
‘repr’, ‘setattr’, ‘sizeof’, ‘str’,
‘subclasshook’, ‘weakref’, ‘getLoss’, ‘getName’, ‘getPrice’,
‘loss’, ‘name’]
私有屬性
如果在屬性名前面加了2個下劃線’__’,則表明該屬性是私有屬性,否則為公有屬性
class Dog:def __init__(self):self.__age = 10 one = Dog() print(one.__age)私有方法
在方法名前面加了2個下劃線’’,是
私有方法。
私有的屬性和私有的方法,在類里面使用
class Work:def __init__(self):self.__age = 10 # __屬性 在類的外部不能訪問def __show(self): # 私有的方法在類的外部不能訪問print(self.__age) # 私有的屬性,在類的外部不能訪問,在類的內(nèi)部可以訪問def look(self):self.__show() # 在類里面可以one = Work() # print(one.__age) #提示錯誤 # one.__show() #提示錯誤 one.look()運(yùn)行結(jié)果:
10
總結(jié)
以上是生活随笔為你收集整理的Python中类方法、类实例方法、静态方法,私有属性和私有方法有何区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中hasattr() get
- 下一篇: Python平衡点问题