В настоящее время я пишу свои классы python и создаю их таким образом
class calculations_class():
def calculate(self):
return True
Calculations = calculations_class()
Мне было интересно, правильно ли я делаю это, или если есть какие-то другие способы их создания. Спасибо!
Помимо вопроса о назначении именования, который были правильно указаны другими ответами, вы в основном в порядке: вызов класса действительно является наиболее распространенным способом создания экземпляра этого класса. Если вам нужна инициализация каждого экземпляра (как правило, для некоторых атрибутов экземпляра для начальных значений), определите метод __init__
, который его выполняет:
class Calculations(object):
def __init__(self):
self.running_total = 0 # or w/ever
def calculate(self):
...
calc = Calculations()
Другие редкие способы создания экземпляра класса обычно возникают, когда вы хотите обойти часть инициализации по какой-либо причине (например, в процессе де-сериализации экземпляра из некоторого файла, базы данных или связи из других процессов - модуль pickle
является хорошим примером необходимости использования таких продвинутых подходов). Я не думаю, что вы должны беспокоиться о них вообще на этом этапе своего обучения Python.
Ну, имена классов, как правило, капитализируются (и camelcase), и имена экземпляров имеют тенденцию быть строчными, но далее, что путь.
class CalculationsClass():
def calculate(self):
return True
my_calc_instance = CalculationsClass()
Это правильно.
Это правильный путь. Единственное, что вы должны сделать по-другому: имена классов должны начинаться с прописной буквы, а переменные с нижним регистром.
Я имею тенденцию использовать следующий формат:
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 порядке, ваши реальные методы приходят первыми, и ваши геттеры и сеттеры продолжаются.
Имена классов должны быть существительными. Методы должны быть глаголами, которые описывают действия, которые может сделать существительное. Атрибуты должны быть существительными, которые описывают, как выглядит существительное.
C
). ii) переменные используют snake_case. iii) Геттеры и сеттеры не принадлежат Python. iv) Методы используют snake_case. v) DoCalculations
может быть статическим методом (но , возможно , в качестве примера был сведен к минимальному и использованию self
опущены).
_class
, поскольку это очевидно и не несет повторения.