Как получить атрибут под названием "property" и использовать @property decorator?


У меня есть небольшая проблема, и я пробовал гуглить, но это не приносит ничего полезного.

Я разрабатываю приложение 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?

2 5

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):
       ....

Используйте "полное" имя встроенного свойства:

import __builtin__

@__builtin__.property
def registryCascadeItems(self): ...
Конечно, я использовал цитаты вокруг термина "полностью квалифицированный", потому что это не питонский термин. В python нет имен-квалификаций. То, что это на самом деле, является просто еще одним местом, где оригинал property определен и может быть доступен.

ИМХО, это также делает ваш код более читаемым. Нет никаких сомнений в том, какого рода свойство задействовано-вы явно ссылаетесь на встроенное.