1. 程式人生 > >009---綁定方法與非綁定方法

009---綁定方法與非綁定方法

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---綁定方法與非綁定方法