Внутренний класс в python, не влияющий на нормальную работу программы

#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 (), чтобы увидеть, что я могу понять. Большое вам спасибо за ваш ответ.