009---绑定方法与非绑定方法
Posted xjmlove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了009---绑定方法与非绑定方法相关的知识,希望对你有一定的参考价值。
绑定方法和非绑定方法
绑定方法(绑定给谁,谁来调用就自动将它本身作为第一个参数传进去)
- 绑定给类:没有加任何装饰器的方法,其实对象也可以调用。只不过内部将类作为第一个参数传进去。
- 绑定给对象:加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---绑定方法与非绑定方法的主要内容,如果未能解决你的问题,请参考以下文章
2020Python修炼记面向对象编程——绑定方法与非绑定方法