彻底解决四种路由器不能上网故障
2010-08-11 17:34
330 查看
Eliminating self with Metaclasses
此文利用 metaclass 和字节码,使得在 class 中定义方法时不再需要显式指定 self 参数,当真妙极!
关于这个 self 参数是否多余,本身也是仁者见仁、智者见智的事情。我认为 python 这么做是有它充分的理由的,那就是 class 中定义的方法本质上还是函数,是函数就应该遵循函数的规矩,没必要对方法进行特殊照顾,隐藏掉 self 参数只是增加了一份 magic。
也许你会问了:那这个 self 是怎么传进去的呢?这里不又是一个 magic 吗?其实,这是利用了 descriptor 对函数进行了包装,而 descriptor 本身是个应用面很广的概念,并不只是为了实现这个而生的。
不管怎么说,相信总是有一些人(可能还是不少人)不喜欢这个 self 参数,那让我们回到主题,看看去掉 self 参数之后的 class 定义是什么样的:
此文利用 metaclass 和字节码,使得在 class 中定义方法时不再需要显式指定 self 参数,当真妙极!
关于这个 self 参数是否多余,本身也是仁者见仁、智者见智的事情。我认为 python 这么做是有它充分的理由的,那就是 class 中定义的方法本质上还是函数,是函数就应该遵循函数的规矩,没必要对方法进行特殊照顾,隐藏掉 self 参数只是增加了一份 magic。
也许你会问了:那这个 self 是怎么传进去的呢?这里不又是一个 magic 吗?其实,这是利用了 descriptor 对函数进行了包装,而 descriptor 本身是个应用面很广的概念,并不只是为了实现这个而生的。
不管怎么说,相信总是有一些人(可能还是不少人)不喜欢这个 self 参数,那让我们回到主题,看看去掉 self 参数之后的 class 定义是什么样的:
class Test(object): __metaclass__ = Selfless def __init__(x=None): self.x = x def getX(): print self.x def setX(x): self.x = x test = Test() test.getX() test.setX(7) test.getX()
相关文章推荐
- 彻底解决四种路由器不能上网故障
- 华为AR-1200-S 路由器拨号上网不能正常访问网页的问题解决
- 四种宽带路由器不能上网故障
- 腾达A5s路由器宾馆模式不能上网的解决办法?
- 四种常见宽带路由器不能上网故障解决方案
- 彻底解决联想手机数据连接不能上网问题(无需恢复出厂设置) 本文来自移动叔叔论坛 ,详细出处请参考:http://bbs.ydss.cn/thread-201115-1-1.html
- 四种宽带路由器不能上网故障
- VMware或VirtualBox能ping通主机但不能上网解决
- 解决VMware虚拟机在netcore nw703路由器下无法上网的问题
- 解决win7和ubuntu双系统ubuntu不能上网的问题
- centOS 7安装后无法上网+虚拟机不能安装问题解决
- ubuntu 不能上网Networking disabled 解决办法
- 一个DNS转发故障,造成的部分域名不能解析的解决方法
- 解决树莓派连载路由器上后无法解析域名导致无法上网的问题
- 完美解决TP-LINK无线路由桥接后电脑能上网、手机不能上的问题
- 卸载OICQ造成网上银行不能连接的故障的解决方法
- Redhat Linux 9.0 在vmware下,桥接不能上网的解决方法
- 上网的时候出现 "Automation 服务器不能创建对象" 的解决方法
- WIN10 电脑连接手机热点不能上网,问题解决