1. 程式人生 > >面向對象——綁定方法與非綁定方法

面向對象——綁定方法與非綁定方法

方法 cti tin 就會 close 效果 lap alt method

1 在類內部定義的函數,分為兩大類
2 一:綁定方法:綁定給誰,就應該由誰來調用,誰來調用就會把調用者當做第一個參數自動傳入
3     綁定到對象的方法:在類內定義的沒有被任何裝飾器修飾的
4     綁定到類的方法:在類內定義的被裝飾器classmethod修飾的方法
5 二:非綁定方法(staticmethod):沒有自動傳值這麽一說,就是類中定義的一個普通函數,對象和類都能使用
6     非綁定方法:不與類或者對象綁定,誰都可以調用,參數該怎麽傳就怎麽傳
技術分享圖片
 1 class Foo:
 2     def __init__(self,name):
 3         self.name = name
4 def tell(self): 5 print("名字是%s"%self.name) 6 @classmethod #綁定到類的方法,類在使用時會將類本身當作參數傳給類方法的第一個參數(即便是對象來調用也會將類當作第一個參數傳入) 7 def func(cls):#cls = Foo 8 print(cls) 9 @staticmethod # 非綁定方法,不與類或對象綁定,誰都可以調用,,沒有自動傳值效果,就是普通函數 10 def func1(x,y): 11 print(x+y) 12
f = Foo(egon) 13 # print(Foo.tell)#<function Foo.tell at 0x0000000001E750D0> 14 # print(f.tell)#<bound method Foo.tell of <__main__.Foo object at 0x0000000001E6ACC0>> 15 # print(Foo.func)#<bound method Foo.func of <class ‘__main__.Foo‘>> 16 # print(f.func)#<bound method Foo.func of <class ‘__main__.Foo‘>>
17 18 # print(Foo.func1)#<function Foo.func1 at 0x00000000027A5488> 19 # print(f.func1)#<function Foo.func1 at 0x00000000027A5488> 20 # Foo.func1(1,2)#3 21 # f.func1(1,2)#3
示例 技術分享圖片
 1 import settings,time,hashlib
 2 #settings存儲人員信息
 3 class People:
 4     def __init__(self,name,age,sex):
 5         self.id = self.creat_id()
 6         self.__name = name
 7         self.__age = age
 8         self.__sex = sex
 9     @property
10     def tell_info(self):
11         print(Name:%s Age:%s Sex:%s %(self.__name,self.__age,self.__sex))
12     @classmethod
13     def from_conf(cls):#cls = People
14         obj = cls(
15             settings.name,
16             settings.age,
17             settings.sex
18         )
19         return obj
20     @staticmethod
21     def creat_id():
22         m = hashlib.md5(str(time.time()).encode(utf-8))
23         return m.hexdigest()
24 #綁定給類,就應該由類來調用,自動將類本身當作第一個參數傳入
25 p = People.from_conf()
26 #綁定給對象,就應該由對象來調用,自動將對象本身當作第一個參數傳入
27 p.tell_info #Name:grace Age:20 Sex:femal
28 print(p.id)#54346551b06e6c324dcc5a940bdef09c
29 #非綁定方法,不與類或者對象綁定,誰都可以調用,沒有自動傳值一說
30 p1 = People(egon,18,male)
31 p1.tell_info#Name:egon Age:18 Sex:male
32 print(p1.id)#54346551b06e6c324dcc5a940bdef09c
應用

面向對象——綁定方法與非綁定方法