def func(self):
假定其第一参数是对实例的引用,调用方法时必须提供实例对象
@classmethod
def func(cls):
假定其第一参数是对类的引用,调用方法时必须提供类对象
@staticmethod
def func():
既不需要提供类对象,也不需要提供实例对象的静态方法
那如何理解既不使用修饰符,也不约定引用的类方法?
'''定义函数时既不使用修饰符,也不假定第一参数'''
class A():
def func():
print('hello')
A.func()
#hello
a=A()
a.func()
#func() takes 0 positional arguments but 1 was given
为什么类A调用func函数时不会默认传递类对象(cls)给函数造成错误,但是实例调用时会默认传递实例对象(self)给函数造成错误?
类作为一个对象,不会像实例一样去传递实例本身(self)吗?
在不使用修饰符
@classmethod
@staticmethod
情况下,func只是类A中的一个属性。
用类A调用func函数是将func做为一个普通函数来调用的。
做为普通函数是不会传递类对象(cls),也没有实例对象(self)可以传递。
方法加上self参数就可以了:
class A():
def func(self):
print('hello')
a=A()
a.func()
声明时
classmethod的第一个参数为类本身(cls),正如实例方法的第一个参数为对象本身(self);
staticmethod第一个参数不需要传入cls或self,故staticmethod中是无法访问类和对象的数据的。
调用时
两者特点