在这个class被载入的情况下。
class Next:
List = []
def __init__(self,low,high) :
for Num in range(low,high) :
self.List.append(Num ** 2)
def __call__(self,Nu):
return self.List[Nu]
如果 这样玩
b = Next(1,7)
print b.List
print b(2)
回馈很正常
[1, 4, 9, 16, 25, 36]
9
但如果这样玩
b = Next
b(1,7)
print b.List
print b(2)
就不行了,TypeError: __init__() takes exactly 3 arguments (2 given)
b(2) 又被传递给了__init__
感觉好怪异,请老大给我讲讲 这两个 Operator Overload
还有就是 有的地方说 __init__ 不能继承给子class.
但 我这里 (V2.4.2) 继承 __init__却很正常。
这是python版本进化造成的吗?
limodou 回复于:2006-03-14 09:22:57
__init__是初始化函数,在生成类的实例时执行。
而
__call__是模拟()的调用,需要在实例上应用,因此这个实例自然是已经执行过__init__了。
你所举的后面那个例子:
b = Next
这并不是创建实例,而是将class赋给一个变量。因此后面使用b进行的操作都是对Next类的操作,那么其实就是:
Next(1,7)
print Next.List
print Next(2)
你说这是什么结果呢?
lvscar 回复于:2006-03-14 10:14:08
"b = Next 不是创建实例,而是将class赋给一个变量。“。。。。就是这句话了。。 谢谢老大。
还请老大对这个问题给个定论。。
还有就是 有的地方说 __init__ 不能继承给子class.
但 我这里 (V2.4.2) 继承 __init__却很正常。
这是python版本进化造成的吗?
谢谢!
limodou 回复于:2006-03-14 10:32:44
不知道要什么定论?
__init__当然可以继承了。只不过,如果你自已又在子类定义了__init__的话,如果不调用父类的__init__,自然父类的__init__就无效了。因此需要你显示地调用才可以。如果不定义,则直接继承。
lvscar 回复于:2006-03-14 12:36:10
恩。。清楚了。。 谢谢。
lvscar 回复于:2006-03-14 23:26:01
天哪 这样就加精了。。。
要加 这个精华也该加给 limodou 。 请版主帮忙转一下
谢谢
wolfg 回复于:2006-03-15 09:31:22
引用:原帖由 lvscar 于 2006-3-14 23:26 发表
天哪 这样就加精了。。。
要加 这个精华也该加给 limodou 。 请版主帮忙转一下
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 冲突 __init__ 回复 Next 继承 实例 谢谢 如果 这个 limodou |
注册
个人空间
