首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python的类方法、静态方法入门有关问题:装饰器函数的具体表达形式呢

2013-02-15 
python的类方法、静态方法入门问题:装饰器函数的具体表达形式呢? 装饰函数的一个简单例子 def deco(func):p

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++中的函数对象相似。

热点排行