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