赞
踩
#funA 作为装饰器函数
def funA(fn):
#...
fn() # 执行传入的fn参数
#...
return '...'
@funA
def funB():
#...
等价于
def funA(fn):
#...
fn() # 执行传入的fn参数
#...
return '...'
def funB():
#...
funB = funA(funB)
总结:这一句@,相当于在定义了funA和funB后,执行了funB=funA(funB)
@staticmethod,@classmethod和@property
python的@staticmethod,@classmethod和@property的使用和区别
什么是cls参数和self参数
什么是__init__, 之类的
class ClassNAme:
attribute1 = 1
attribute2 = 2
def method1(self):
print("method1")
def method2(self):
print("method2")
每创建一个对象时会调用。
如果不手动为类添加任何构造方法,Python 也会自动为类添加一个仅包含 self 参数的构造方法。
仅包含 self 参数的 init() 构造方法,又称为类的默认构造方法。
myObject = ClassNAme(参数)
self类似于C++的this,表示这个对象自己的引用。
说到self就不得不提cls.
self是对象的引用,用到self就等价于用到这个对象名本身。
cls是类的引用,用到cls就等价于用到这个类本身。
举个例子:
下面这里,staticmethod没有self也没有cls,所以他里面完全不能调用实例方法foo2。
但classmethod可以通过cls,用cls()实例化一个对象,从而调用实例方法foo2
class A(object):
a = 'a'
@staticmethod
def foo1(name):
print 'hello', name
print A.a # 正常
print A.foo2('mamq') # 报错: unbound method foo2() must be called with A instance as first argument (got str instance instead)
def foo2(self, name):
print 'hello', name
@classmethod
def foo3(cls, name):
print 'hello', name
print A.a
print cls().foo2(name)
作者:秦风
链接:https://www.zhihu.com/question/49660420/answer/335991541
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
详见上文
myObject = ClassName() 的时候回调用。
__new__()在init之前调用。
暂时还不知道有什么用。
通过重写类的__repr__() 方法,自定义输出实例化对象时的信息。
这样每次print(对象)的时候,就会输出__repr__方法return的东西。
print(对象)的时候调用。
del 对象名
该函数会返回一个包含有所有属性名和方法名的有序列表(包括父类的)。
用法: dir(myObject) 或 myObject.__dir__()
myObject.__dict__
torch.__versjion__
子类继承父类时,只需在定义子类时,将父类(可以是多个)放在子类之后的圆括号里即可。语法格式如下:
class 类名(父类1, 父类2, …):
#类定义部分
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。