Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何从子方法属性获取父属性?_Python_Python 2.7 - Fatal编程技术网

在Python中,如何从子方法属性获取父属性?

在Python中,如何从子方法属性获取父属性?,python,python-2.7,Python,Python 2.7,我有以下代码: def some_method(): #i need to get some attrs :( return 'blabla' setattr(parent, 'new_attr', some_method) 有没有一种方法可以在some\u方法函数中获取父对象的其他属性 提前谢谢 更新:(解决方案) 我就是这样解决的,我不知道是不是最好的 def some_method(parent): # print or do something parent.

我有以下代码:

def some_method():
    #i need to get some attrs :(
    return 'blabla'

setattr(parent, 'new_attr', some_method)
有没有一种方法可以在
some\u方法
函数中获取父对象的其他属性

提前谢谢

更新:(解决方案)

我就是这样解决的,我不知道是不是最好的

def some_method(parent):
    # print or do something parent.xy_attribute
    return 'blabla'

parent.new_attr = some_method(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\u attr()
,它将能够打印/操作/任何您想要的父属性

下面是一个更加充实的示例,说明如何使用它来操作函数上的计数器(或者,比方说,刷新函数缓存)


任何具有其他属性的对象您需要发布更多有关您尝试执行的操作以及如何在父对象中获取属性的信息?您需要
一些方法
获取一个
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)
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