009---綁定方法與非綁定方法
阿新 • • 發佈:2019-01-26
sel env urn ron () odi tel object init
綁定方法和非綁定方法
綁定方法(綁定給誰,誰來調用就自動將它本身作為第一個參數傳進去)
- 綁定給類:沒有加任何裝飾器的方法,其實對象也可以調用。只不過內部將類作為第一個參數傳進去。
- 綁定給對象:加classmethod裝飾器的方法,其實類也可以調用,只不過要將對象作為第一個參數傳進去。
非綁定方法
- 在類的內部使用staticmethod裝飾器的函數叫做非綁定方法,誰都可以調用,沒有自動傳值一說,就是普通函數。
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "ziya" # Date: 2018-08-27 class Foo: def __init__(self, name): self.name = name def tell(self): return '名字是:%s' % self.name @classmethod def func(cls): return '類方法:%s' % cls @staticmethod def func1(obj): print('我是非綁定方法,誰都(%s)可以調用' % obj) def func2(): print(111) f = Foo('江偉') print('綁定到類,類方法:', Foo.func) print('綁定到對象,實例方法:', f.tell) print('類調用實例方法,但是第一個參數傳對象', Foo.tell(f)) print('對象用類方法,雖然不要傳參數,但是內部仍然是以類作為第一個參數傳入', f.func()) f.func1('我是對象') # 我是非綁定方法,誰都(我是對象)可以調用 Foo.func1('我是類') # 我是非綁定方法,誰都(我是類)可以調用 ''' 在內部定義的函數,分為兩大類: 1、綁定方法: ---綁定到對象的方法:未被任何裝飾器修飾的 綁定給誰,就應該由誰來調用,會自動傳參 ---綁定到類的方法:在類內部定義的被裝飾器classmethod修飾的方法 2、非綁定方法 沒有自動傳值一說,就是一普通工具而已 '''
綁定到類,類方法: <bound method Foo.func of <class ‘main.Foo‘>>
綁定到對象,實例方法: <bound method Foo.tell of <main.Foo object at 0x000002B240FAED68>>
類調用實例方法,但是第一個參數傳對象 名字是:江偉
對象用類方法,雖然不要傳參數,但是內部仍然是以類作為第一個參數傳入 類方法:<class ‘main.Foo‘>
我是非綁定方法,誰都(我是對象)可以調用
我是非綁定方法,誰都(我是類)可以調用
009---綁定方法與非綁定方法