#python #class #oop
#python #класс #ооп
Вопрос:
Я создаю множество алгоритмов в разных файлах, используя одни и те же атрибуты класса.
Этот класс получает свои атрибуты от щелчков по холсту tkinter.
class Algo:
def __init__(self, x, y):
self.x = x
self.y = y
def callback(event):
x, y = event.x, event.y
return (Point(x, y))
В настоящее время у меня есть один алгоритм, использующий этот класс.
Я планирую добавить больше алгоритмов в другие файлы с тем же атрибутом Point.
- Есть ли способ сделать эти атрибуты общими для разных классов в разных файлах?
- Лучше ли просто создать один класс в отдельном файле и не использовать ООП для других файлов, передавая атрибуты функциям?
Комментарии:
1. Независимо от того, разделяете ли вы конструкции между разными модулями и используете ли ООП, это две разные проблемы. Я бы определил класс (или namedtuple или dataclass) для Point и импортировал его в несколько модулей… В основном, если у вас есть
Point = collections.namedtuple("Point", ["x", "y"])
(например) в файле с именемdescartes.py
you can dofrom descartes import Point
, и вы поймете суть.
Ответ №1:
Что касается вопроса 1, часть a: «Есть ли способ сделать эти атрибуты общими для разных классов», это просто простое наследование, проиллюстрированное ниже.
Поскольку вы обеспокоены тем, что ваши классы находятся в разных файлах:
- Обратите внимание, во-первых, что в Python нет ничего, что требовало бы 1 класса для каждого файла.
- См. Комментарий кодзиро.
- В общем, доступ к файлам между файлами осуществляется путем их импорта.
- Если вы хотите наследовать от класса, определенного в другом месте, импортируйте класс. Если вы хотите использовать функцию, определенную в другом месте, импортируйте функцию. Однако импорт должен иметь значение 0 для вопроса о том, используете ли вы классы или нет.
c
class Pointed:
def __init__(self, x, y):
self.x=x
self.y=y
class Algo(Pointed):
def __init__(self, x, y, something_else):
super().__init__(x, y)
self.something_else = something_else
algo = Algo(3, 4, "hello world")
print(algo.x)
print(algo.y)
print(algo.something_else)