热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python代码符号_Python的@符号

Python一直都属于用,没有去系统学习过,在一次代码review中见到了符号,回来看了下,这个符号用于装饰器中࿰

Python一直都属于用,没有去系统学习过,在一次代码review中见到了@符号,回来看了下,这个符号用于装饰器中,用于修饰一个函数,把被修饰的函数作为参数传递给装饰器,下面举几个例子:

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):

pass

A.classM() #class method, and invoker: A

B.classM() #class method, and invoker: B

A.staticM() #static method

B.staticM() #static method

a=A()

a.classM() #class method, and invoker: A

a.staticM() #static method

b=B()

b.classM() #class method, and invoker: B

b.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:

hello

25

3. 不常见的写法,用来修饰一个class,在单例模式中能用到

def singleton(cls):

instance={}

def getinstance():

if cls not in instance:

instance[cls]=cls()

return instance[cls]

return getinstance

@singleton

class Myclass:

pass

#output

>>> my1=Myclass()

>>> print my1

<__main__.Myclass instance at 0x00000000028C2F48>

>>> my2&#61;Myclass()

>>> print my2

<__main__.Myclass instance at 0x00000000028C2F48>



推荐阅读
author-avatar
码农
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有