類中的方法,其實就是類中定義的函數,能夠分爲:綁定方法、非綁定方法。函數
綁定方法:綁定給誰,就應該由誰來調用,誰來調用就會把調用者看成第一個參數自動傳入工具
在類內定義的沒有被任何裝飾器修飾的
spa
特色:爲對象量身定製;3d
對象.bound_method(),自動將對象當作第一個參數傳入(屬於類的函數,類能夠調用,可是必須按照函數的規則來,沒有自動傳值那麼一說
)code
在類內定義的被裝飾器@classmethod修飾的方法對象
特色:爲類量身定製;blog
類.bound_method(),自動將類當作第一個參數傳入(其實對象也能夠調用,但仍將類做爲第一個參數傳入)
md5
非綁定方法:在類中用@staticmethod裝飾器裝飾的方法。utf-8
特色:不與類或對象綁定,類和對象均可以調用,可是沒有自動傳值那麼一說。就是一個普通工具而已。hash
在類中直接定義的函數,沒有被任何裝飾器裝飾的,都是綁定到對象的方法,可不是普通函數,對象調用該方法會自動傳值;
而staticmethod裝飾的方法(非綁定方法),無論誰來調用,都沒有自動傳值一說。
class Foo: def __init__(self, name): self.name = name def tell(self): # 綁定了對象的函數 print('名字是%s' % self.name) @classmethod def func(cls): # 綁定了類的方法,默認傳入參數是類自己 print(cls) @staticmethod def func1(x, y): # 在類內部的普通函數 print(x+y) f = Foo('egon') print(Foo.tell) print(f.tell) """ <function Foo.tell at 0x104021378> <bound method Foo.tell of <__main__.Foo object at 0x101fb6390>> """ print(Foo.func) """ <bound method Foo.func of <class '__main__.Foo'>> """ Foo.func() """ <class '__main__.Foo'> """ print(Foo.func1) f.func1(1, 3) Foo.func1(2, 4) """ <function Foo.func1 at 0x104021488> 4 6 """
現有配置文件settings.py
name = 'alex' age = 18 sex = 'female'
運用類的方法,查看配置文件信息:
import settings import hashlib import time class People: def __init__(self, name, age, sex): self.id = self.create_id() self.name = name self.age = age self.sex = sex def tell_info(self): print('Name %s Age %s Sex %s' % (self.name, self.age, self.sex)) @classmethod def from_conf(cls): obj= cls( settings.name, settings.age, settings.sex ) return obj @staticmethod def create_id(): # 不依賴類和對象的方法,所以建立普通函數 m = hashlib.md5(str(time.time()).encode('utf-8')) return m.hexdigest() p = People('egon',18,'male') # 綁定給對象,就應該由對象來調用,自動將對象自己當作第一個參數傳入 p.tell_info() # tell_info(p) """ Name egon Age 18 Sex male """ # 綁定給類,就應該由類來調用,自動將類自己當作第一個參數傳入 p=People.from_conf() # from_conf(People) p.tell_info() """ Name alex Age 18 Sex female """ # 非綁定方法,不與類或對象綁定,誰均可以調用,沒有自動傳值一說 p1 = People('egon1', 18, 'male') p2 = People('egon2', 28, 'male') p3 = People('egon3', 38, 'male') print(p1.id) print(p2.id) print(p3.id) """ a653d2ce4826a31051d7ddd13a9d82cf 4c0f5168f3a2fdb96a37430380d336e4 b214300c918bc319b840077dfdbb8425 """