Сам Ссылающийся на Определение класса в Python

Для углового 2 используйте

<div [ngClass]="{'active': dashboardComponent.selected_menu == 'mapview'}">Content</div>
19
задан pedlar 19 June 2009 в 22:14
поделиться

5 ответов

у меня есть метакласс, который считывает эту информацию и выполняет некоторые настройки

Большинство фреймворков, использующих метаклассы, позволяют решить эту проблему. Например, Django :

subplan = ForeignKey('self')

Google App Engine :

subplan = SelfReferenceProperty()

Проблема с решениями, такими как добавление дополнительного свойства позже или использование __ new __ , заключается в том, что большинство метаклассов ORM ожидают свойства класса должны существовать во время создания класса.

8
ответ дан 30 November 2019 в 03:48
поделиться

Синус Python 3.7 и PEP 563 там является способом сделать это.

Добавляют импорт

from __future__ import annotations

, и следующий код будет работать

from __future__ import annotations
from typing import List

class Refer(object):
    def __init__(self, x: Plan):
        self.x: Plan = x

class Plan(object):
    def __init__(self):
        pass
    subPlan: Refer(Plan())
0
ответ дан 30 November 2019 в 03:48
поделиться

Попробуйте следующее:

class Plan(SiloBase):
    cost = DataField(int)
    start = DataField(System.DateTime)
    name = DataField(str)
    items = DataCollection(int)

Plan.subPlan = ReferenceField(Plan)

ИЛИ используйте __ new __ вот так:

class Plan(SiloBase):

    def __new__(cls, *args, **kwargs):
        cls.cost = DataField(int)
        cls.start = DataField(System.DateTime)
        cls.name = DataField(str)
        cls.items = DataCollection(int)
        cls.subPlan = ReferenceField(cls)
        return object.__new__(cls, *args, **kwargs)
24
ответ дан 30 November 2019 в 03:48
поделиться

Я понимаю, что происходит, имя класса не входит в область видимости внутри класса.

Не совсем так. Имя класса еще не определено при определении его содержимого (например, области видимости).

2
ответ дан 30 November 2019 в 03:48
поделиться

Нет, вы не можете этого сделать. Подумайте, что произойдет, если вы сделаете следующее:

 OtherPlan = Plan
 other_plan = OtherPlan()

При создании экземпляра other_plan , как называется класс?

В любом случае, такие вещи лучше всего делать в __ new__ , который принимает параметр cls , относящийся к классу.

0
ответ дан 30 November 2019 в 03:48
поделиться