[英]How to get parent attributes from a child method attribute in Python?
我有这个代码:
def some_method():
#i need to get some attrs :(
return 'blabla'
setattr(parent, 'new_attr', some_method)
有没有办法在some_method
函数中获取父级的其他属性?
提前致谢!
更新:(解决方案)
我这样解决了,我不知道是不是最好的。
def some_method(parent):
# print or do something parent.xy_attribute
return 'blabla'
parent.new_attr = some_method(parent)
它的工作原理!
再次感谢!
你真正想要的是创建一个MethodType
对象来分配(从types
)。
import types
setattr(parent, 'new_attr', types.MethodType(some_method, parent, type(parent)))
如果parent
类是一个类,那么您可以通过给出self参数并使用它来访问其属性,就像使用类的任何其他方法一样。
如果它不是一个类,也许处理这个的最好方法是在包装器/工厂/东西中编写你的函数而不是直接作为方法。
def some_method_wrapper(parent):
def some_method():
#access any parent attribute
#by using the parent positional argument passed to the function
print parent.desired_attribute
return 'blabla'
setattr(parent, 'new_attr', some_method)
然后,您可以使用parent.new_attr()
,它将能够打印/操作/您想要的任何父属性。
下面是一个更加丰富的示例,说明如何使用它来操作函数上的计数器(或者说,刷新函数缓存)。
def parent_function(numbers):
# do something with numbers
parent_function.counter += 1
return sum(numbers)
parent_function.counter = 0
def add_reset_function(parent):
def reset_counter():
parent.counter = 0
setattr(parent, 'reset', reset_counter)
# call parent_function a few times
numbers = [1, 2, 3]
for i in range(4): parent_function(numbers)
print parent_function.counter # 4
add_reset_function(parent_function)
# call the reset function just added
parent_function.reset()
print parent_function.counter # 0
parent_function(numbers)
print parent_function.counter # 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.