Прослушивание типичного примера класса Point при изучении Python, я заметил, что по какой-то причине у меня не может быть уровня класса (статическая переменная) того же типа, что и класс. Например.Переменные класса одного и того же типа в Python
class Point:
ORIGIN = Point() # doesn't work
def __init__(self, x=0, y=0):
self.x = x
self.y = y
в то время как одни и те же работы в Java:
class Point {
public static void main(final String[] args) { }
private static final Point ORIGIN = new Point(0, 0);
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
Вопрос заключается в том: есть ли способ достичь того же в Python. Сейчас я полагаюсь на переменные уровня модуля, и мне не нравится это решение. Кроме того, есть ли причина, почему это невозможно сделать в теле класса?
«Сейчас я полагаюсь на переменные уровня модуля, и мне не нравится это решение» Почему бы и нет? Глобалы на уровне модулей делают намного больше смысла, чем странные статические конечные переменные, скрытые внутри определений классов. Что случилось с более простым решением? – 2010-12-06 19:17:27
@ S.Lott: аргументация состоит в том, что ORIGIN * не * принадлежит к любому модулю. Если, например, Я решил перенести этот класс на другой модуль, так как ссылка ORIGIN всегда остается неизменной. – sasuke 2010-12-06 19:42:23
put ORIGIN - это экземпляр Point и принадлежит к тому же самому модулю. Если вы переместите один, почему бы вам не переместить другого? – 2010-12-06 19:56:00