#python
#python
Вопрос:
Я изучаю Python одновременно с работой над тематическим проектом, и я понял, что у меня есть два класса (класс senA и SeNB), которые представляют два похожих элемента, поэтому я подумал, можно ли сгруппировать эти два класса в общий класс (General class), я смотрел на внутренний класс, но, к сожалению, поскольку я должен получить доступ к аргументам каждого класса (senA и SeNB), всегда генерируется ошибка. Мой код выглядит следующим образом
class senA():
def __init__(self, arg, arg2):
self.arg = arg
self.arg2 = arg2
class sensB():
def __init__(self, arg3):
self.arg3 = arg3
for i in range (3):
obj = senA('hx', 'ex')
objx = sensB ('hello')
values=list(attrs.values())
valuesx=list(attrsx.values())
list_VALORES.append(values)
list_metodos.append(valuesx)
print(list_metodos)
print(list_VALORES)
и это работает хорошо, но я хотел бы связать классы senA и SeNB в один, называемый classGeneral
class general():
class senA():
def __init__(self, arg, arg2):
self.arg = arg
self.arg2 = arg2
class sensB():
def __init__(self, arg3):
self.arg3 = arg3
но это генерирует постоянные ошибки или, например, программа перестает распознавать классы, когда я создаю экземпляры объектов. Есть идеи, как я мог бы это решить
Извините за мой плохой английский, но я не являюсь носителем английского языка. Я стараюсь быть как можно более понятным
Комментарии:
1. Я попробовал ваш пример, затем я изменил obj = senA (‘hx’, ‘ex’) / objx = sensB (‘hello’) на obj = general().senA(‘hx’, ‘ex’) / objx = general().sensB(‘hello’). У меня это работает идеально.
2. Вам придется обращаться к этим классам как
general.senA
иgeneral.senB
, но почему? Чего вы пытаетесь достичь?3. Джоки, ты абсолютно прав. Вот как это работает лучше всего. Это действительно очень помогло мне, стало ясно, что я должен продолжать узнавать о классах и о том, как получить к ним доступ. Еще раз, большое вам спасибо.
Ответ №1:
Насколько я понимаю, вы хотите создать отдельный модуль для хранения классов senA
и sensB
. Если вы создадите файл Python с именем general.py
, который содержит определения классов, вы можете затем импортировать его в другой скрипт Python. Итак, в вашем main.py
вы бы добавили следующую строку вверху: from general import senA, sensB
, и вы смогли бы использовать их как обычно.
Если все ваши классы похожи и имеют общие атрибуты, вы также можете использовать наследование. Например:
class General:
def __init__(self, arg1):
self.arg1 = arg1 # argument that both senA and sensB use
class senA(General):
def __init__(self, arg1, arg2):
super().__init__(arg1)
self.arg2 = arg2
class sensB(General):
def __init__(self, arg1, arg2, arg3):
super().__init__(arg1)
self.arg2 = arg2
self.arg3 = arg3
Затем вы могли бы получить доступ к атрибутам из этих классов в обычном режиме, например:
a = senA('arg1 value', 'arg2 value')
print(a.arg1) # returns 'arg1 value'
print(a.arg2) # returns 'arg2 value'
Комментарии:
1. Я не думал о модуле, это своего рода то, что я хочу сделать. Пока я просматриваю класс super (), чтобы увидеть, что я могу понять. Большое вам спасибо за ваш ответ.