问题标签 [getattr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 艰难地学习 Python:练习 43 函数创建
我的问题源于上面的代码块,可在Learn Python The Hard Way -练习 43中找到。我知道第三行将getattr()
函数结果(在本例中self.next
为 )存储到room
变量中(除非我错了......?)
现在让我感到困惑的是第四行,函数room()
存储在变量next
中。从根本上说,我不理解这room()
部分,因为这不是代码块中定义的函数。Python 是否允许用户根据前面的变量定义函数?(例如:room()
第一次编写会room()
根据存储在变量中的内容创建一个调用的函数room
)。
任何帮助将不胜感激!
python - 参数如何通过 __getattr__ 传递给函数
考虑以下代码示例(python 2.7):
可以看出,函数调用通过's函数person.make_statement(20)
调用函数。在调用子实例中的相应函数之前,我可以在函数中打印出属性。到目前为止很清楚。Child.make_statement
Parent
__getattr__
__getattr__
但是调用的参数是如何person.make_statement(20)
通过的__getattr__
呢?如何在我的__getattr__
函数中打印出数字“20”?
python - 如何使用 __getattr__ 访问调用参数和参数
我有以下代码,其中大部分代码看起来很尴尬、令人困惑和/或间接,但其中大部分是为了演示我遇到问题的更大代码的部分。请仔细阅读
我想要的是捕获所有方法调用,DeviceProxy
以便能够打印所有参数/参数等等。在给定的示例中,这在调用时效果很好info(1)
,所有信息都被打印出来。但是当我调用双点函数dev.obj.foo(3)
时,我只得到这不是可调用的消息。
如何修改上述代码,以便在第二种情况下获得我的信息?只能修改下面的代码===
。
python - `setattr`(和`getattr`)的使用可以被认为是不好的做法吗?
setattr
并且getattr
有点进入我的编程风格(主要是科学的东西,我对 python 的了解是自说自话的)。
考虑到这一点exec
并eval
继承潜在的危险,因为在某些情况下它们可能会导致安全问题,我想知道对于setattr
相同的论点是否被认为是有效的。(关于getattr
我发现这个问题包含一些信息 - 尽管论证不是很有说服力。)
据我所知,setattr
可以不用担心太多,但老实说我不太相信我的python知识,如果我错了,我想尝试改掉使用的习惯setattr
.
非常感谢任何输入!
python - getattr() 与 dict 查找,哪个更快?
一个有点无聊的最佳实践问题。object.__dict__[some_key]
我习惯性地使用动态查找对象属性值。现在我想知道哪个更好/更快:我目前的习惯或getattr(object,some_key)
. 如果一个更好,为什么?
python - 使用 getattr throwing 访问的绑定 Python 方法:“不接受任何参数(给定 1 个)”
在我无法理解的绑定方法、继承和 getattr 之间的交互中发生了一些相当奇怪的事情。
我有一个目录设置,如:
import_module.py 包含许多类对象,其中一个是这种形式:
start_module.py 中的一个函数使用inspect 来获取表示imported_module.py 中的类的字符串列表。“Foo”是这些字符串中的第一个。目标是使用该字符串和 getattr.* 在 start_module.py 中运行 bar
为此,我使用以下形式的 start_module 代码:
它确实成功地开始迭代列表理解,但是在第一个字符串“bar”上,我得到了一个奇怪的错误。尽管 bar 是一个绑定方法,据我所知,期望 Foo 的实例作为参数,我被告知:
TypeError: bar() 不接受任何参数(给定 1 个)
这使得我对 function() 的调用似乎传递了 Foo 实例,但代码并不期望接收它。
我真的不知道这里发生了什么,也无法通过查看 Google 和 Stack Overflow 来解析出一个解释。双重 getattr 是否会导致一些奇怪的交互?我对 Python 中的类对象的理解是否过于模糊?我很想听听你的想法。
*为了避免反模式,真正的最终目标是让 start_module.py 自动访问各种类的名称栏的所有方法,类似于 import_module.py 中的 Foo。我这样做是为了避免让我的继任者维护一个可能非常多的类似 Foo 的类的列表。
回答如下:我认为这里最大的收获是检查非常有用,如果您遇到的错误有共同的原因,请在继续寻找其他可能性之前绝对确保您已经排除了这种可能性。在这种情况下,我忽略了一个事实,即我正在查看的具有正确代码的模块可能不是由于最近对文件结构进行的编辑而被导入的模块。
python - 有没有办法覆盖 Python 中任意对象的双下划线(魔术)方法?
我想编写一个包装类,它接受一个值并且除了添加一个“原因”属性外,它的行为就像它一样。我有这样的想法:
但是,双下划线函数似乎没有被捕获__getattribute__
,例如:
我认为以上两个最终应该这样做:
为什么这没有发生?我怎样才能让它发生?(在实际代码中实际使用这可能是一个可怕的想法,但我现在对技术问题很好奇。)
python - 如何使用 __getattr__ 函数处理和返回 Python 类中缺少的属性和函数?
在 Python 类上使用特殊方法来处理缺少的属性或函数相当容易__getattr__
,但似乎不能同时处理两者。
考虑这个例子,它处理任何在类的其他地方没有明确定义的请求的属性......
接下来,考虑这个例子,它处理在类的其他地方没有明确定义的任何函数调用......
问题是如何同时处理两种类型的缺失属性__getattr__
?如何检测请求的属性是属性表示法还是带括号的方法表示法并分别返回值或函数?本质上,我想处理一些缺失的属性属性和一些缺失的函数属性,然后在所有其他情况下采用默认行为。
建议?
python - 通过继承巧妙地处理不同的权限
我必须管理权限并且我有不同的用户类型,例如这里的一对。
现在我希望能够拥有 MultiRole 类型,理论上它应该能够做它的角色能够做的所有事情。
我尝试过这样的事情:
哪个应该用作
但这不起作用,理想情况下,我想为传入的所有类调用方法并执行 or (with any)。
问题是要调用我需要有一个该类型的对象的方法..
理论上,我什至可以只为每个角色使用字典,但我喜欢默认为 false 的技巧,有时我还需要一个函数来计算权限。
有什么建议么?
python - 使用 getattr 获取方法的对象引用
说,我有以下被class
称为Test
method
start
现在,我有一个独立的function
名为func
[1] 现在,t.start
是属于method
的一个instance of __main__.Test
0xb769678c
[2]
func
是function
属于哪个位置的0xb767ec6c
现在,我们可以使用 builtin来提取__module__
fromt.start
和。不出意外,和属于同一个iefunc
__module__
func
t.start
module
__main__
[3] 现在,让我们将__module__
for存储t.start
在一个变量中obj
现在,我getattr()
用来获取函数的func
句柄如下,输出是[2]<function func at 0xb767ec6c>
func
getattr()
identical
问题:
我如何使用和模块名称 [3] 来获取应该是 [1]getattr()
的句柄Test.start
<bound method Test.start of <__main__.Test instance at 0xb769678c>>
当我尝试使用getattr()
时,'t.start'
我得到以下Traceback
换句话说,我有两个数据。他们是
__import__('__main__')
- 刺
'Test.start'
现在,我如何获得应该是t.start
(注意这里)的句柄instance
<bound method Test.start of <__main__.Test instance at 0xb769678c>>