1
sillyousu 2014-02-02 18:12:02 +08:00 1
Python 本来就没有重载这一说的。 貌似 普通的method 会把 classmethod 覆盖的。
|
3
ritksm 2014-02-02 18:20:46 +08:00 1
我想知道这样写的实际意义在哪里。为什么会有一个class method和instance method重名,能举个不是foobar的例子么。。
再说了明明不能重载的嘛,方法重载的意义在于对于静态类型的语言,可以区别不同的方法,但是对于Python直接*args **kwargs不就可以了么,然后在方法逻辑里判断 |
4
ritksm 2014-02-02 18:21:34 +08:00
|
5
raquelken 2014-02-02 18:22:12 +08:00 1
|
6
raquelken 2014-02-02 18:23:05 +08:00
|
7
raquelken 2014-02-02 18:24:39 +08:00
<script src="https://gist.github.com/raquelken/938a5e3df4a97a038652.js"></script>
|
8
raquelken 2014-02-02 18:32:53 +08:00
|
9
raquelken 2014-02-02 18:34:13 +08:00
S**t, 我放弃了
class test: def __init__(self): self.a = 1 self.foo = self._foo @classmethod def foo(cls, p, flag): pass def _foo(self, p): print(self.a) |
10
yangff 2014-02-02 19:18:27 +08:00 1
|
11
yangff 2014-02-02 19:19:46 +08:00
|
12
orzfly 2014-02-02 19:27:06 +08:00 1
|
13
wenLiangcan OP @ritksm 我想写一个豆瓣电台 api 算是 wraper 的类,额,当作练习而已啦。。有些操作可以不登录进行,所以我想登录的话就传入登录信息获得一个实例,不登录就通过 classmethod 操作。当然,也可以用 foo 和 foo_logined 这样区分,可是觉得统一命名比较好看吧。。。。
|
14
wenLiangcan OP @raquelken 原来还可以这样!
|
15
ritksm 2014-02-02 20:33:24 +08:00
感觉应该那么写?然后全部生成一个实例,用内部逻辑去判断是不是登录了。。
http://gist.github.com/8767690 而且就算变成了class method,其实也是可以instance.foo_class_method()的...参见 http://docs.python.org/2/library/functions.html#classmethod 感觉LZ是不是和staticmethod搞混了... 感觉class method基本上都是用来做helper或者工厂方法的...比如上面那个gist的第二个例子 |
16
ritksm 2014-02-02 20:35:58 +08:00
|
17
wenLiangcan OP |