Альтернативные способы создания класса в Python

1

В настоящее время я пишу свои классы python и создаю их таким образом

class calculations_class():
    def calculate(self):
        return True

Calculations = calculations_class()

Мне было интересно, правильно ли я делаю это, или если есть какие-то другие способы их создания. Спасибо!

  • 3
    Ваши имена переменных и классов полностью обратны. Имена классов начинаются с заглавных букв. имена переменных начинаются со строчных букв Имена классов НИКОГДА не заканчиваются на _class , поскольку это очевидно и не несет повторения.
  • 1
    Вы имеете в виду «создать экземпляр», как в «создать экземпляр», а не «инициировать», что означает «начать». Вы, вероятно, объединяете инстанцирование и инициализацию.
Теги:

5 ответов

7
Лучший ответ

Помимо вопроса о назначении именования, который были правильно указаны другими ответами, вы в основном в порядке: вызов класса действительно является наиболее распространенным способом создания экземпляра этого класса. Если вам нужна инициализация каждого экземпляра (как правило, для некоторых атрибутов экземпляра для начальных значений), определите метод __init__, который его выполняет:

class Calculations(object):
  def __init__(self):
    self.running_total = 0  # or w/ever
  def calculate(self):
    ...

calc = Calculations()

Другие редкие способы создания экземпляра класса обычно возникают, когда вы хотите обойти часть инициализации по какой-либо причине (например, в процессе де-сериализации экземпляра из некоторого файла, базы данных или связи из других процессов - модуль pickle является хорошим примером необходимости использования таких продвинутых подходов). Я не думаю, что вы должны беспокоиться о них вообще на этом этапе своего обучения Python.

4

Ну, имена классов, как правило, капитализируются (и camelcase), и имена экземпляров имеют тенденцию быть строчными, но далее, что путь.

class CalculationsClass():
    def calculate(self):
        return True

my_calc_instance = CalculationsClass()
1

Это правильно.

0

Это правильный путь. Единственное, что вы должны сделать по-другому: имена классов должны начинаться с прописной буквы, а переменные с нижним регистром.

0

Я имею тенденцию использовать следующий формат:

class CCalculations():        #Classes always begin with "C"
    def __init__(self):
        self.foo = 0
        self.fooBar = 0       #Variables use camelCase

    def DoCalculations(self): #Methods use uppercase
        return true

    def getFoo(self): 
        return self.foo       #getters and setters use camelCase

Причины этого варьируются:

  • Помещение "C" перед именем класса легко отделяет то, что является классом, и что такое метод/функция. Это особенно полезно, если вы используете хорошую среду IDE (я использую WingIDE). Таким образом, все ваши классы расположены в одном месте, потому что все они начинаются с C. Кроме того, он делает код более читаемым, поскольку вы точно знаете, что вы запускаете класс и не вызываете функцию.

  • Использование заглавных букв для обычных методов и camelCase для геттеров и сеттеров означает, что более важные регулярные методы не загромождают пространство имен с помощью gets/sets. Таким образом, в классе, поскольку все идет в ASCII-betical порядке, ваши реальные методы приходят первыми, и ваши геттеры и сеттеры продолжаются.

  • Имена классов должны быть существительными. Методы должны быть глаголами, которые описывают действия, которые может сделать существительное. Атрибуты должны быть существительными, которые описывают, как выглядит существительное.

  • 0
    Зачем предоставлять метод getFoo (), если атрибут foo является открытым?
  • 0
    Это нарушает довольно много соглашений Python. i) Как уже упоминалось, используйте CamelCase для имен классов (не используйте префикс C ). ii) переменные используют snake_case. iii) Геттеры и сеттеры не принадлежат Python. iv) Методы используют snake_case. v) DoCalculations может быть статическим методом (но , возможно , в качестве примера был сведен к минимальному и использованию self опущены).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню