在python里面self, cls 不是关键字完全可以使用自己写任意变量代替实现样效果
代码1
复制代码 代码如下:
MyTest:
myname = 'peter'
def sayhello(hello):
pr "say hello to %s" % hello.myname
__name__ "____":
MyTest.sayhello
代码1中, 用hello代替掉了self, 得到是样效果也可以替换成java中常用this.
结论 : self和cls只是python中约定写法本质上只是个参数而已没有特别含义
任何对象思路方法都会把把自己作为该思路方法中第个参数传递到中(在python中万物都是对象所以当我们使用Class.method时候实际上第个参数是我们约定cls)
2. 类定义可以动态修改
代码2
复制代码 代码如下:
MyTest:
myname = 'peter'
def sayhello(self):
pr "say hello to %s" % self.myname
__name__ "____":
MyTest.myname = 'hone'
MyTest.sayhello = lambda self,name: "I want say hello to %s" % name
MyTest.saygoodbye = lambda self,name: "I do not want say goodbye to %s" % name
pr MyTest.sayhello(MyTest.myname)
pr MyTest.saygoodbye(MyTest.myname)
这里修改了MyTest类中变量和定义 例子化instance有了区别行为特征
3. decorator
decorator是个 接收个作为参数 返回值是个
代码3
复制代码 代码如下:
def enhanced(meth):
def (self, y):
pr "I am enhanced"
meth(self, y)
C:
def bar(self, x):
pr "some method says:", x
bar = enhanced(bar)
上面是个比较典型应用
以常用@method为例
正常使用思路方法是
代码4
复制代码 代码如下:
C:
@method
def foo(cls, y):
pr "method", cls, y
这里有个疑惑地方不是很明白: 如果个思路方法没有使用@method, 那么用Class.method方式是会报错但是@method是个decorator, 那么它返回也是个为什么这样就可以直接被Class了呢?
最新评论