码迷,mamicode.com
首页 > 其他好文 > 详细

10 绑定方法与非绑定方法

时间:2018-09-06 23:10:25      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:必须   def   ati   static   round   就是   color   结果   func   

类中定义的函数分为两大类

1、绑定方法

1.1、绑定到类的方法:用classmethod装饰器的方法

为类量身定制

类.bound_method(),自动将类当作第一个参数传入

(其实对象也可调用,但任然将类当作第一个参数传入)

 

class Foo:
    def __init__(self,name):
        self.name = name
    def tell(self):
        print(f"名字{self.name}")
    @classmethod # 把类本身当作第一个参数
    def func(cls):  # cls = Foo
        print(cls)
f = Foo(LELE)
Foo.func()
结果:
<class __main__.Foo>

 

 

 

1.2、绑定到对象的方法:没有被任何装饰器装饰的方法

为对象量身定制

对象.bound\_method\(\),自动将对象当作第一个参数传入

(属于类的函数,类可以调用,但必须按照函数的规则来,没有自动传值那么一说)

 

class Foo:
    def __init__(self,name):
        self.name = name
    def tell(self):
        print(f"名字{self.name}")
f = Foo(LELE)
print(f.tell())
print(f.tell)

 

2、非绑定方法(不与类或者对象绑定):用staticmethod装饰器装饰的方法

不与类或对象绑定,类和对象都可以调用,但没有自动传值那么一说。就是一个普通工具而已

注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,

而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

 

#=====非绑定方法----对象和类都可以用
class Foo:
    def __init__(self,name):
        self.name = name
    def tell(self):# 绑定方法,绑定给对象
        print(f"名字{self.name}")
    @classmethod # 绑定方法:绑定给类 把类本身当作第一个参数
    def func(cls):  # cls = Foo
        print(cls)

    @staticmethod  # 非绑定方法 
    def func2(x,y):  
        print(x+y)

f = Foo(LELE)
Foo.func2(1,2) #
f.func2(1,4) 

 

类内部定义的函数:

绑定方法:绑定给对象 ,在内部创建的函数没有装饰器;绑定给类,有装饰器@classmethod把类本身当作第一个参数

非绑定方法:@staticmethod普通函数,谁都可调用

 

10 绑定方法与非绑定方法

标签:必须   def   ati   static   round   就是   color   结果   func   

原文地址:https://www.cnblogs.com/foremostxl/p/9601161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!