1
saximi OP 顺便问一下,为何我在外面编辑好的代码包含了缩进,一贴到论坛里就体现不出缩进了?
|
2
bravecarrot 2017-07-18 01:18:14 +08:00 via iPhone
附加问题:你需要使用 markdown,代码块儿是''' 1⃣️那个键位。
1. 先调用__new__。但是很少有人这么写,因为一般都用不到。参见 stackoverflow 上关于 new 的问题。然后调用 init。是不是分配内存,我没研究过,不妄言 2.obj=Foo()==Foo.__call__() |
3
NoAnyLove 2017-07-18 10:29:51 +08:00
要用 Markdown 格式包围代码才能保证缩进,而且仅对发帖有效,回帖不支持 Markdown
|
4
saximi OP @bravecarrot 感谢,但是我越发糊涂了。
我看了这篇博文 http://python.jobbole.com/83747/ 博文的“ 5.__call__”小节写了这段话:“注:构造方法的执行是由创建对象触发的,即:对象=类名();而对于__call__方法的执行是由对象后加括号触发的,即:对象()或者类()()” 就是因为看了这段话,结合这个程序,我才觉得有问题,obj=Foo()这个语句应该是博文中的 对象=类名() 这个形式,所以不应该调用 Foo.__call__()方法才对啊? 关于这个观点,我还有一个例子可以说明,比如下面这段代码和对应的输出,请注意语句 1 就是一个把对象实例化的语句,这个语句并没有调用类的__call__()方法: class Deco: def __init__(self,func): self.func=func print("__init__执行完毕。func=",self.func) def __call__(self,*arg,**arg2): print("开始执行__call__。") self.func('abc') print(self,arg,arg2) class MyCls(): @Deco def myFunc(self): print('this is my work arg is %s'%self) mycls=MyCls() deco=Deco(mycls.myFunc) #语句 1 代码输出如下: __init__执行完毕。func= <function MyCls.myFunc at 0x01C49AE0> __init__执行完毕。func= <__main__.Deco object at 0x01C4B190> |