V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  saximi  ›  全部回复第 8 页 / 共 11 页
回复总数  201
1  2  3  4  5  6  7  8  9  10 ... 11  
2017-08-24 01:25:44 +08:00
回复了 saximi 创建的主题 Python 请问这段代码错在哪里呢?
@lrxiao 关于出错信息,是不是说__init__方法应该要传入 4 个参数,但是实际只传了一个位置参数?
2017-08-24 01:21:39 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@u2386 谢谢,才知道有 pdb 这个工具,我用的是 Visual Studio Code 这个 IDE,但是坑爹的是始终搞不定单步调试功能,一按 F5 就整个程序全部执行,设置的断点从未生效,如果可以单步执行的话,就更容易发现问题了。
2017-08-24 01:13:24 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@u2386
@lrxiao 感谢大家!我终于明白了,我对代码中的错误总结如下:
1、第一段代码,类 onInstance 的__init__方法中,错误地传入了 aClass 参数,这样传入后该参数并不是装饰器 onDecorator 参数中的类 aClass,实际上却会对应到类 Doubler 的第一个位置参数 label。
2、第一段代码,因为程序执行到 X.label 时始终没有触发类 onInstance 的__call__方法,所以在__call__方法中才首次赋值的 self.wrapped 并未出现在 onInstance 的__dict__中,
从而在__getattr__中的 self.wrapped 会导致死循环。我之前一直以为只要在类定义中写出来的变量都会出现在类的__dict__中,原来是要被执行后才会加入__dict__的,受教了!

另外,上面有朋友提到的“在__getattr__中永远不要直接使用 getattr()或者 self.xxx ”,这句话要辩证地看,
一方面使用 getattr 本身并不等于死循环,只要确保方法的参数不会递归调用__getattr__即可;另一方面只要确保 self.xxx 已经被赋值,就会出现在 self.__dict__中,从而就不会递归调用__getattr__了。
2017-08-24 00:05:50 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@wwqgtxx 您是说在__getattr__方法中使用 super(self,类名).__getattr__ ? 这样不就是死循环了么?__getattr__重载时又调用了自己
2017-08-24 00:04:45 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@lrxiao 我是在 PYTHON3 下执行的。我把“ return getattr(self.wrapped, attr) ” 这一句改成“ object.__getattribute__(self.wrapped, attr)”后,还是一样死循环呢。
2017-08-23 23:55:05 +08:00
回复了 saximi 创建的主题 Python 请问这段代码错在哪里呢?
@lrxiao 不是很明白呢,是说作为 metaclass 的类 F,它的 init 方法要带专门的参数么?具体到我给的例子,应该怎么改呢?谢谢
2017-08-23 23:42:03 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@Trim21 万分感谢! 现在还有个问题,就是论坛如何贴图呢? 据说要装插件,但是我的 CHROME 和 FIREFOX 都无法安装上插件,不知道是怎么回事,还有其他方法可以发图么?
2017-08-23 23:16:18 +08:00
回复了 saximi 创建的主题 Python 请教一个关于__getattr__的问题
@Trim21 我觉得论坛不是很好用,当贴代码的时候,我都是直接文本贴进来然后选 markdown,然后就是这个效果了,连变量前面的两个下划线都显示不出来。 有没有简便的方法可以让贴出来的代码格式规范呢
2017-08-23 22:51:23 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@enomine 关于您的类的装饰器这篇 http://45.32.54.6/2017/04/17/Decorators-for-Class/,
例子“ 1.3 装饰器带参数 2 ”,既然 A() = Decorator(1,2).__call__() ,那为何__call__方法不返回一个对象,而是返回方法 wrapper,这样等号两边的对象不会不匹配么?
2017-08-22 21:38:11 +08:00
回复了 saximi 创建的主题 Python 请教关于类装饰器的问题
@lrxiao 关于这个问题,我另外又发了个帖子,我觉得好像找到了存在矛盾的例子,能否指点,感谢!
https://www.v2ex.com/t/384994#reply0
2017-08-22 21:37:00 +08:00
回复了 saximi 创建的主题 Python 请教关于类装饰器的问题
@lrxiao 您是说 self.C 是从外部传入的参数,所以可以看做是 global 的实例化方法,但是 cls 就是作用域在 wrapper 定义域内的实例化方法么?
2017-08-22 21:11:27 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@enomine 关于您写的这篇文章 http://45.32.54.6/2017/04/17/Decorators-for-Functions-and-Methods/。
我看“ 2.1 函数不带参数”小节中,装饰器的效果等同于 echo()=Decorator.__call__() ,所以等号的右边,即 Decorator.__call__()运行后应该要返回一个函数才对吧?
但是为何__call__方法直接就执行 self.fun(),而不是 return self.fun 呢?
2017-08-21 23:57:34 +08:00
回复了 saximi 创建的主题 Python 请教关于类装饰器的问题
@lolizeppelin 我不知道要怎么理解这句话“没有能够处理给定的类的多个实例——每个实例创建调用都覆盖了前面保存的实例。” ,覆盖?怎么个覆盖法?
2017-08-21 23:49:33 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@garfieldWu 感谢!
2017-08-21 23:48:54 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@enomine 感谢指点,关于装饰器我另外还发了一个问题求指点,如果有空的话,能否看看我发的帖子,点拨我一下呢,谢谢了! https://www.v2ex.com/t/384418#reply2
2017-08-21 23:46:02 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@lrxiao AOP 是什么的缩写呢?语法?
2017-08-21 22:37:05 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@Kilerd 感谢指点,我晕了,register 是函数不是类!顺便问个问题,所谓的函数装饰器,是说装饰器是一个函数,还是说被装饰的对象是函数呢?
2017-08-21 22:32:24 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@Kilerd 不是很明白,您的例子中因为没有 b()这样的调用语句,自然 b 不会被执行。可我的例子中第一个装饰器是执行了 register(f1()),这时 register.__init__()应该被执行的吧?
2017-08-21 22:26:35 +08:00
回复了 saximi 创建的主题 Python 关于装饰器中__init__方法的问题
@Trim21 我是看过预览才发的,我用论坛用不太好,比如 name 前后各有两个下划线没有显示出来,因为着急问问题,想着这不影响整体阅读就没有去改了
2017-08-21 21:13:13 +08:00
回复了 saximi 创建的主题 Python 请教关于类装饰器的问题
@lolizeppelin 谢谢,你写得话我基本能看明白,但是我还是无法和我的问题联系起来理解,第二个类装饰器是调用 Decorator.__call__方法,可这和“没有能够处理给定的类的多个实例——每个实例创建调用都覆盖了前面保存的实例”这句话有什么关系?
1  2  3  4  5  6  7  8  9  10 ... 11  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   855 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 22:46 · PVG 06:46 · LAX 15:46 · JFK 18:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.