使用';财产';作为python类中方法的名称

使用';财产';作为python类中方法的名称,python,properties,scope,decorator,naming,Python,Properties,Scope,Decorator,Naming,这在Python中可能吗 class MyClass(object): @property def property(self): return self._property 也就是说,我想要一个名为“property”的属性。它实际上运行得很好,但Eclipse发出了警告。我认为内置的@property decorator与我的类中的方法和属性所在的命名空间不同 是否可以重命名相关模块范围内的内置装饰器,这样我就可以在不收到此警告的情况下使用名称“proper

这在Python中可能吗

class MyClass(object):
    @property
    def property(self):
        return self._property
也就是说,我想要一个名为“property”的属性。它实际上运行得很好,但Eclipse发出了警告。我认为内置的@property decorator与我的类中的方法和属性所在的命名空间不同

是否可以重命名相关模块范围内的内置装饰器,这样我就可以在不收到此警告的情况下使用名称“property”?可能是以下情况:

attr = property

class MyClass(object):
    @attr
    def property(self):
        return self._property
class Foo(object):
    @property
    def property(self):
        return "ham"

    @property
    def other_property(self):
        return "spam"
我这样做了,但仍然得到警告,因为我为全局内置@property decorator创建了一个别名,但名称“property”仍然是引用它的有效方式


有什么想法吗?

命名属性的问题如下:

attr = property

class MyClass(object):
    @attr
    def property(self):
        return self._property
class Foo(object):
    @property
    def property(self):
        return "ham"

    @property
    def other_property(self):
        return "spam"
无法定义第二个属性,因为您已在类定义中隐藏名称
属性


您可以通过“重命名”
property
来解决这个问题,如您的示例所示,但如果我是您,我不会以这种方式干扰内置程序。这会使代码更难理解。

命名属性
属性的问题如下:

attr = property

class MyClass(object):
    @attr
    def property(self):
        return self._property
class Foo(object):
    @property
    def property(self):
        return "ham"

    @property
    def other_property(self):
        return "spam"
无法定义第二个属性,因为您已在类定义中隐藏名称
属性


您可以通过“重命名”
property
来解决这个问题,如您的示例所示,但如果我是您,我不会以这种方式干扰内置程序。它使代码更难理解。

装饰器是普通函数,因此它们与其他函数位于同一名称空间中。实际上,您的
属性
函数在类
Foo
中;但事实证明,这是python首先查找装饰器名称的地方,因此存在冲突

您可以从以下代码编译的事实中看到这一点:

class Foo(object):

    def decfun(x): return "ham"

    @decfun
    def second(self, y): pass

装饰器是普通函数,因此它们与其他函数位于同一命名空间中。实际上,您的
属性
函数在类
Foo
中;但事实证明,这是python首先查找装饰器名称的地方,因此存在冲突

您可以从以下代码编译的事实中看到这一点:

class Foo(object):

    def decfun(x): return "ham"

    @decfun
    def second(self, y): pass

它是可以定义的,只是不是那样的。@IgnacioVazquez Abrams:是的,OP的解决方案可以做到这一点。将此添加到答案中。@larsmans,我已经注意到您的问题,并通过将“def属性”声明为类中的最后一个属性来解决它。它确实做到了这一点,并且运行起来。只是日食的警告让我烦恼。当我运行脚本时,它甚至没有警告我。@Ernesto:我不使用Eclipse,所以我不能告诉你如何关闭警告。我只是建议您不要调用属性
属性
,但这是您的调用,而且它不受语言的限制。它可以定义,只是不是这样。@IgnacioVazquez Abrams:是的,OP的解决方法可以做到这一点。将此添加到答案中。@larsmans,我已经注意到您的问题,并通过将“def属性”声明为类中的最后一个属性来解决它。它确实做到了这一点,并且运行起来。只是日食的警告让我烦恼。当我运行脚本时,它甚至没有警告我。@Ernesto:我不使用Eclipse,所以我不能告诉你如何关闭警告。我只是建议您不要调用属性
属性
,但这是您的调用,它不受语言的影响。