1. self, cls 不是关键字 
在python里面,self, cls 不是关键字,完全可以使用自己写的任意变量代替实现一样的效果 
代码1 
复制代码 代码如下:
class MyTest: 
myname = \’peter\’ 
def sayhello(hello): 
print \”say hello to %s\” % hello.myname 
if __name__ == \”__main__\”: 
MyTest().sayhello() 
代码1中, 用hello代替掉了self, 得到的是一样的效果,也可以替换成java中常用的this. 
结论 : self和cls只是python中约定的写法,本质上只是一个函数参数而已,没有特别含义。 
任何对象调用方法都会把把自己作为该方法中的第一个参数,传递到函数中。(因为在python中万物都是对象,所以当我们使用Class.method()的时候,实际上的第一个参数是我们约定的cls) 
2. 类的定义可以动态修改 
代码2 
复制代码 代码如下:
class MyTest: 
myname = \’peter\’ 
def sayhello(self): 
print \”say hello to %s\” % self.myname 
if __name__ == \”__main__\”: 
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 
print MyTest().sayhello(MyTest.myname) 
print MyTest().saygoodbye(MyTest.myname) 
这里修改了MyTest类中的变量和函数定义, 实例化的instance有了不同的行为特征。 
3. decorator 
decorator是一个函数, 接收一个函数作为参数, 返回值是一个函数 
代码3 
复制代码 代码如下: 
def enhanced(meth): 
def new(self, y): 
print \”I am enhanced\” 
return meth(self, y) 
return new 
class C: 
def bar(self, x): 
print \”some method says:\”, x 
bar = enhanced(bar) 
上面是一个比较典型的应用 
以常用的@classmethod为例 
正常的使用方法是 
代码4 
复制代码 代码如下:
class C: 
@classmethod 
def foo(cls, y): 
print \”classmethod\”, cls, y 
这里有个疑惑的地方,不是很明白: 如果一个方法没有使用@classmethod, 那么用Class.method()的方式,是会报错的。但是@classmethod是个decorator, 那么它返回的也是一个函数,为什么这样就可以直接被Class调用了呢?