首页 > 代码库 > Python的@符号
Python的@符号
Python一直都属于用,没有去系统学习过,在一次面试中见到了@符号,回来看了下,这个符号用于装饰器中,用于修饰一个函数,把被修饰的函数作为参数传递给装饰器,下面举几个例子:
1. @classmethod和@staticmethod
这两个含义很明显,在定义方法的时候@classmethod表示该方法是类方法,类方法必须有一个参数为cls,表示类本身,实例方法的第一个参数是self.@staticmethod修饰的方法基本上和一个全局函数相同。
这两个修饰的方法通过实例和类调用都是可以的
class A(): @classmethod def classM(cls): print "class method, and invoker:",cls.__name__ @staticmethod def staticM(): print "static method"class B(A): passA.classM() #class method, and invoker: AB.classM() #class method, and invoker: BA.staticM() #static methodB.staticM() #static methoda=A()a.classM() #class method, and invoker: Aa.staticM() #static methodb=B()b.classM() #class method, and invoker: Bb.staticM() #static method
2. 作为普通的修饰符,下面的定义类似于 testone=func(testone)
class C(): def func(fn): def test(*args): print "hello" return test @func def testone(a,b): print a**2+b**2 if __name__=="__main__": testone(3,4)#output:hello
class C(): def func(fn): def test(*args): print "hello" fn(*args) return test @func def testone(a,b): print a**2+b**2 if __name__=="__main__": testone(3,4)#output:hello25
3. 不常见的写法,用来修饰一个class,在单例模式中能用到
def singleton(cls): instance={} def getinstance(): if cls not in instance: instance[cls]=cls() return instance[cls] return getinstance@singletonclass Myclass: pass#output>>> my1=Myclass()>>> print my1<__main__.Myclass instance at 0x00000000028C2F48>>>> my2=Myclass()>>> print my2<__main__.Myclass instance at 0x00000000028C2F48>
Python的@符号
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。