绑定方法与非绑定方法:
#一绑定方法:@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,即为非绑定方法,谁都没有绑定,谁都可以调用,就一普通函数,所以谁用谁传值