绑定方法与非绑定方法

绑定方法与非绑定方法:

#一绑定方法:@classmethod
# 绑定给类用,默认传的第一个参数是类,其实对象也可调用,但仍将类当作第一个参数传入
# 绑定到类的参数方法,类中的函数,加装饰器的是绑定给类使用的
class Foo:
    def __init__(self,name):
        self.name = name

    def tell_info(self):
        print('名字是%s' % self.name)

    @classmethod    #加这个之后就绑定到类,意味着类可以直接调用.
    def func(cls): #
        print(cls,' 打印可以看出是绑定到类的') #加上@classmethod作用只是用于被他装饰的函数

f  = Foo('egon')
Foo.func() #<class '__main__.Foo'>  打印可以看出是绑定到类的
# Foo.tell_info()  #你看tell_info函数没有加装饰器,没有绑定到类,不能直接通过类名去访问
f.tell_info() #要通过对象去访问,实例化后的对象访问

二 非绑定方法@staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

class Foo1:
    def __init__(self,name):
        self.name = name

    def tell_info(self):
        print('名字是%s' % self.name)

    @staticmethod #非绑定,谁都不绑定,谁都可以用,谁用谁传值,相当于是普通函数
    def func1(x,y): #作用于这一个函数,如果想作用于其他函数,就在其他函数的上面加装饰器
        print(x + y)

f  = Foo1('egon')

Foo1.func1(1,2)# 类来调用,需要传参数进去
f.func1(1,3)# 对象来调用,需要穿参数

在类内部创建的方法(函数)默认是绑定到对象的,绑定到对象,所以对象可以直接调用

在类内部函数加装饰器的@classmethod,就指定为绑定到类的,所以类可以直接调用.

在类内部函数加装饰器@staticmethod,即为非绑定方法,谁都没有绑定,谁都可以调用,就一普通函数,所以谁用谁传值

原文地址:https://www.cnblogs.com/sunny7/p/9715835.html