如何返回属性并将其另存为全局变量?(python)

如何返回属性并将其另存为全局变量?(python),python,properties,Python,Properties,这是我的密码: def createProp(fget, fset, fdel): class prop(object): get=property(fget,fset,fdel) return prop().get x=createProp(getter,setter,deleter) 我想做的是让它返回一个属性,这样我就可以把变量x变成一个属性,但是我不知道如何生成这样的函数。它所做的是返回属性的值,而不是属性本身 python 2.6 createPr

这是我的密码:

def createProp(fget, fset, fdel):

    class prop(object):
        get=property(fget,fset,fdel)

    return prop().get
x=createProp(getter,setter,deleter)
我想做的是让它返回一个属性,这样我就可以把变量x变成一个属性,但是我不知道如何生成这样的函数。它所做的是返回属性的值,而不是属性本身

python 2.6

createProp = property
属性是完全普通的对象<代码>属性只是另一个类。您可以在运行时创建它的实例,在您想要的任何上下文中(不需要类),传递它们,等等。是的,您可以(无意义地)在本地类中创建一个实例,然后从那里获取它。但由于整个属性点覆盖了实例上的属性访问,您必须从类中获取它:
return prop.get


然而,
属性
的神奇之处在于,描述符必须在类中才能工作。您不能拥有作为属性的全局(或局部)变量——当然,您可以,但使用它只会为您提供描述符对象,而不会运行
fget
,赋值也不会触发
fset
。您不能这样做,也不应该这样做。

您正在创建prop对象的属性,然后调用它。我不确定类之外的属性对象有什么意义;属性基本上是类实例中伪私有或计算数据段的一组封装访问器。你能解释一下这个功能的用例吗?那么,如果我不能生成一个全局属性,是否有其他方法可以生成一个返回常量的函数?@QxQ“一个返回常量的函数”是完全不同的事情,它就像
def():return
一样简单。请澄清。我认为属性允许您创建一个setter,如果您试图更改它,它会抛出一个错误,但我不能将它们用作全局变量,因此我想知道一些其他的解决方法来限制变量的访问(以及类似的事情)。如果您想要一个实常量(一个无法更改的全局变量):如果不劫持
sys.modules
并替换模块的模块对象,我怀疑这是不可能的。我不确定这是否会影响模块内的代码(也许您必须处理所有函数对象)。简言之,这是不可行的。它打破了一些高级但合理的用例(例如,单元测试的补丁),由此引起的实际错误很少(适当的命名约定有助于:pep8要求像这样的常量),而且它的模糊性和困难性破坏了它可能具有的任何其他优势。只要接受Python的规则就行了。