python的类方法、静态方法入门问题:装饰器函数的具体表达形式呢?
装饰函数的一个简单例子
def deco(func):
print("before myfunc() called.")
func()
print(" after myfunc() called.")
return func
@deco
def myfunc():
print(" myfunc() called.")
相当于说:myfunc=deco(myfunc)
把这个概念和类方法、静态方法掺和在一起,我就不明白了。
class A(object):
"This ia A Class"
@staticmethod
def Foo1():
print("Call static method foo1()\n")
@classmethod
def Foo2(cls):
print("Call class method foo2()")
print("cls.__name__ is ",cls.__name__)
请问,你的staticmethod,classmethod具体形式呢?你作为装饰器本身,它的表达形式呢? python class object
[解决办法]
我试着回答下。
对于类中定义的各种方法(未装饰过的).一般是这样的形式。func(self,...)第一个参数是self,即绑定的对象。
调用时可以用两种方法 c.func(...)或者C.func(c,...) 。
***对于前者python在解释时,会自动给C.func传入c变量***
学过C++的话应该知道:静态函数就是不依赖于对象实例的函数。类只起到一种命名空间的作用。
而staticmethod是不需要绑定对象后使用的!所以调用形式为C.static_func(...) 或者c.static_func(...)
staticmethod函数为python内部提供的(build-in或者别的),,,,
大概形式:
def staticmethod(func): #只是大概形式,对于c.static_func调用方式有效。。
f = func
def wrapper(self,*args):
return f(*args) #看这,只是将python解释器第一个传入的变量self去掉了。
return wrapper
同理对于classmethod的大概形式是: 本例子只对c.class_func这种调用方式有效!
def classmethod(func):
f = func
def wrapper(self, *args):
return f(type(s),args) #将传入的self对象转化为其类型,type(self)
return wrapper
上面的这个还涉及到闭包的概念了,,闭包和c++中的函数对象相似。