类的实例方法静态方法类方法属性方法属性
目錄:
- 分類
- 實(shí)例方法
- 靜態(tài)方法
- 類方法
- 屬性方法
- 屬性
分類:
按照調(diào)用方式可以分為3種,實(shí)例方法、靜態(tài)方法、和類方法
實(shí)例方法
實(shí)例方法只能通過實(shí)例對(duì)象調(diào)用,不能通過類進(jìn)行調(diào)用。實(shí)例方法再定義時(shí)候使用關(guān)鍵字self,self代表實(shí)例對(duì)象本身。
class A():x=100def fun(self,y):self.x+=y a=A() a.fun(10) print(a.x) A.fun(10)*****結(jié)果****** 110 Traceback (most recent call last): #類調(diào)用錯(cuò)誤File "/home/34f17b632da0cc986bc0f291c0518783.py", line 8, in <module>A.fun(10) TypeError: fun() missing 1 required positional argument: 'y'靜態(tài)方法
靜態(tài)方法可以使用實(shí)例對(duì)象調(diào)用,也可以使用類進(jìn)行調(diào)用,他的的特點(diǎn)沒有參數(shù)限制,定義時(shí)需要在函數(shù)前加@staticmethod
作用:靜態(tài)方法可以更好的組織代碼,防止代碼變大后變得比較混亂。
特性: 靜態(tài)方法只是名義上歸類管理,實(shí)際上在靜態(tài)方法里訪問不了類或則實(shí)例中的任何屬性
靜態(tài)方法使用場(chǎng)景:
- 我們要寫一個(gè)只在類中運(yùn)行而不在實(shí)例中運(yùn)行的方法.
- 經(jīng)常有一些跟類有關(guān)系的功能但在運(yùn)行時(shí)又不需要實(shí)例和類參與的情況下需要用到靜態(tài)方法
- 比如更改環(huán)境變量或者修改其他類的屬性等能用到靜態(tài)方法
- 這種情況可以直接用函數(shù)解決, 但這樣同樣會(huì)擴(kuò)散類內(nèi)部的代碼,造成維護(hù)困難
@staticmethod靜態(tài)方法
class Dog(object):def __init__(self,name):self.name = name@staticmethoddef eat():print("I am a static method") d = Dog("ChenRonghua") d.eat() #方法1:使用實(shí)例調(diào)用 Dog.eat() #方法2:使用類直接調(diào)用類方法
可以被類調(diào)用,也可以被實(shí)例對(duì)象調(diào)用,實(shí)例調(diào)用可以給類增加屬性,類的屬性修改需要通過類進(jìn)行修改,類方法需要使用關(guān)鍵字cls,定義時(shí)候需要在函數(shù)前加@classmethod
@classmethod類方法
class Dog(object):name = '類變量' #在這里如果不定義類變量?jī)H定義實(shí)例變量依然報(bào)錯(cuò)def __init__(self,name):self.name = '實(shí)例變量'self.name = name@classmethoddef eat(self,food):print("%s is eating %s"%(self.name,food)) Dog.eat('baozi') #方法1:使用類直接調(diào)用 d = Dog("ChenRonghua") d.eat("包子") #方法2:使用實(shí)例d調(diào)用屬性方法
屬性方法的作用:
作用:屬性方法把一個(gè)方法變成一個(gè)屬性,隱藏了實(shí)現(xiàn)細(xì)節(jié),調(diào)用時(shí)不必加括號(hào)直接d.eat即可調(diào)用self.eat()方法
@property屬性方法
class Dog(object):def __init__(self, name):self.name = name@propertydef eat(self):print(" %s is eating" % self.name) d = Dog("旺旺") d.eat() # 調(diào)用會(huì)出以下錯(cuò)誤, 說NoneType is not callable, 因?yàn)閑at此時(shí)已經(jīng)變成一個(gè)靜態(tài)屬性了, # 不是方法了, 想調(diào)用已經(jīng)不需要加()號(hào)了,直接d.eat就可以了屬性
1.類的公有屬性
public_attrs:能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時(shí) public_attrs_attrs,在類的外部class_name.public_attrs。
2.類的私有屬性
__private_attrs:兩個(gè)下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時(shí) self.__private_attrs。
3.類的(公有)方法
在類的內(nèi)部,使用 def 關(guān)鍵字來定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個(gè)參數(shù),self 代表的是類的實(shí)例。
self 的名字并不是規(guī)定死的,也可以使用 this,但是最好還是按照約定是用 self。
公有屬性,普通屬性,私有屬性 比較
1. 公有屬性:在內(nèi)存中僅存一份
2. 普通屬性:每個(gè)實(shí)例對(duì)象在內(nèi)存存一份
3. 私有屬性:實(shí)例在外部無法調(diào)用
4.類的私有方法
__private_method:兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用 ,不能在類的外部調(diào)用。self.__private_methods。
- 默認(rèn)情況下,程序可以從外部訪問一個(gè)對(duì)象的特性
- 為了讓方法和特性變成私有(從外部無法訪問),只要在它的名字前加上雙下劃線即可
- 先在__inaccessible從外界是無法訪問的,而在內(nèi)部還能使用(比如從accessible訪問)
類中函數(shù)私有化
class Secretive:def __accessible(self):print("you can't see me,unless you're calling internally")def accessible(self):print("The secret message is:")self.__accessible() s = Secretive() s.accessible()# 運(yùn)行結(jié)果: # The secret message is: # you can't see me,unless you're calling internally總結(jié)
以上是生活随笔為你收集整理的类的实例方法静态方法类方法属性方法属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 列表字符串集合字典的常见方法
- 下一篇: select poll epoll I