Python 为函数指定属性

Python 为函数指定属性,python,python-2.7,attributes,Python,Python 2.7,Attributes,这可能是一个非常初级的问题,但我有一个关于属性的问题。 我有一个模块负责Google Docs API操作,其中包含检索信息的函数。我希望能够引用这些函数中的某些变量作为属性。 以下是一个例子: Gdocs.py def getRows(): rows = #action for getting rows rowsText = #action for converting to text 通用.py import Gdocs text = Gdocs.getRows.rowst

这可能是一个非常初级的问题,但我有一个关于属性的问题。 我有一个模块负责Google Docs API操作,其中包含检索信息的函数。我希望能够引用这些函数中的某些变量作为属性。 以下是一个例子:

Gdocs.py

def getRows():
    rows = #action for getting rows
    rowsText = #action for converting to text
通用.py

import Gdocs
text = Gdocs.getRows.rowstext
我知道传递变量的基本效果可以通过返回值来实现,但如果可能的话,我想将它们称为属性。简单地说,我的问题是,如何创建我可以在另一个.py文档中引用的函数的属性


感谢和抱歉,如果已经回答了,我确实尝试过搜索,但一直运行到非常具体的问题。

虽然我理解您所说的不希望每个函数都有一个类

当您有一个类时,您可以将@property装饰器应用于函数。 这可以让您有效地创建显示行为但可以像属性一样调用的函数。在下面的示例中,如果希望基于输入列表生成正方形列表,可以创建一个名为create_list_of_squares的类似动词的函数。但是在这种情况下,如果你真的想让API保持简单,并抽象出方法背后的机制,并简单地让用户访问属性“squares”,你可以使用一个属性装饰器,就像这样

class SquareList(list):
    @property
    def squares(self):
        return [x ** 2 for x in self]

s = SquareList([1, 2, 3, 4])
print s.squares
这将产生:

[1, 4, 9, 16]

听起来好像要返回由多个部分组成的结果。不要为此使用函数属性,而是返回可以通过属性寻址的新对象。这也使得它具有线程安全性,因为函数属性与函数对象本身位于同一范围内:作为全局属性

标准库中有一个有用的类工厂函数,用于处理这样的返回值:

返回值是一个元组子类,因此可以像使用索引的元组一样对其进行寻址,也可以将其解压为单独的值,或者您可以使用属性:

result = calculate_coordinates(spam, ham, eggs)
print result.x, result.y


所有工作都可以。

这有点奇怪,但您可以使用staticmethod和类来获得您想要的。也就是说:

资料来源:zattr2.py 用法:
请参阅:

具体是什么属性?如果您同时具有属性和方法,则可能需要一个类,而不仅仅是一个函数。@Martijn Pieters:我想创建函数gerRows的属性above@jonrsharpe当前位置我也想使用一个类,但在使用过程中遇到了麻烦。如果我的Gdocs.py有几个类,那么我可以引用该属性,但在我看来,为我需要的每个函数创建一个类是不正常的。有没有人能给我一个基本的例子来说明它是如何工作的,这样我就可以引用变量,比如:text=Gdocs.getRows.rowstext?函数属性只是名称空间的全局变量;现在还不清楚你想解决什么问题。
result = calculate_coordinates(spam, ham, eggs)
print result.x, result.y
res_x, res_y = calculate_coordinates(spam, ham, eggs)
class getRows(object):
    @staticmethod
    def rows(arg):
        return [arg, arg]

    @staticmethod
    def rowsText(arg):
        return repr(arg)
>>> import zattr2
>>> zattr2.getRows.rowsText('beer')
"'beer'"