【问题标题】:How do you have an attribute called "property" and use the @property decorator?你如何拥有一个名为“property”的属性并使用@property 装饰器?
【发布时间】:2014-09-09 06:55:04
【问题描述】:

我遇到了一点问题,我尝试过谷歌搜索,但没有找到任何有用的信息。

我正在设计一个 django 应用程序,我希望/需要一个名为“property”的字段。这样做的原因是,我正在尝试管理的事物的技术名称,并且我希望尽可能保留业务术语。

现在这还不是问题……直到现在。

我现在需要一个方法,我希望能够将其用作属性,但在使用令牌 property 时存在一些冲突。

class DataElementConcept(trebleObject):
    template = "polls/dataElementConcept.html"
    objectClass = models.ForeignKey(ObjectClass,blank=True,null=True)
    property = models.ForeignKey(Property,blank=True,null=True)

    @property
    def registryCascadeItems(self):
        return [self.objectClass,self.property]

我得到这个错误是可以理解的。

  File "/home/theodore/Github/possum-mdr/polls/models.py", line 381, in DataElementConcept
    @property
TypeError: 'ForeignKey' object is not callable

有没有办法让我将此方法视为属性,并保留property 属性?

【问题讨论】:

    标签: python django properties built-in


    【解决方案1】:

    使用内置属性的“完全限定”名称:

    import __builtin__
    
    @__builtin__.property
    def registryCascadeItems(self): ...
    

    当然,我在“完全限定”一词周围使用了引号,因为这不是一个 Python 术语。 python 中没有名称限定。这实际上只是另一个定义原始property 并可以访问的地方。

    恕我直言,这也使您的代码更具可读性。毫无疑问,这涉及到什么样的属性——你明确地引用了内置的。

    【讨论】:

    • (您需要导入__builtin__ 模块来执行此操作。)
    【解决方案2】:

    也许这会有所帮助:

    # On the module-level, do a workaround reference
    # as property() is just a normal built-in function
    _property = property 
    
    class Foobar:
       property = ....
    
    
       @_property
       def registryCascadeItems(self):
           ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2018-11-24
      • 2018-10-25
      • 2019-07-09
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多