Переключение между классами и передача результатов

#python-3.x #class

Вопрос:

Я пытаюсь добавить различные подключаемые модули к плате и извлечь комбинацию. В первом классе я извлекаю одну букву из списка, если они совпадают или возвращают входные данные. например

 lead = PlugLead("AG")
assert(lead.encode("A") == "G")
 
 class PlugLead:
    def __init__(self, c):
        self.c = c
        
    def encode(self, l):
        c0 = self.c[0]
        c1 = self.c[1]
        if len(l) == 1 and c0 == l:
            return c1
        elif len(l) == 1 and c1 == l:
            return c0
        else:
            return l
        
class Plugboard:
    def __init__(self):
        self.__head = 0
        self.leads = []
        self.c = []
    
    def add(self, item):
        if self.__head >= 10:
            print("leads already got 10 items")
        elif item in self.leads:
            print(f"leads already have this item: {item}")
        else:
            self.leads.append(item)
            self.__head  = 1
        return self.leads

    def encode(self)
        lines = plugboard.leads
        for word in lines:
            word = word.split(",")
            PlugLead.encode(word)
 

Во втором классе я пытаюсь добавить несколько комбинаций, а затем в конце передать одну букву, чтобы посмотреть, каково ее соответствие в плагине класса, однако я не могу переключаться между ними. В плагине класса у меня есть функция добавления, которая позволяет добавлять различные комбинации до 10, а затем я хотел бы закодировать из этого списка комбинацию пар. например

 plugboard = Plugboard()

plugboard.add(PlugLead("SZ"))
plugboard.add(PlugLead("GT"))
plugboard.add(PlugLead("DV"))
plugboard.add(PlugLead("KU"))

assert(plugboard.encode("K") == "U")
assert(plugboard.encode("A") == "A")
 

Ответ №1:

  • если вы хотите использовать PlugLead("{balabala}") ,вам нужно использовать __new__ для возврата a dict при создании экземпляра, а не __init__ .
  • вам нужна пара ключ-значение Plugboard , она должна быть dict не list
  • исправьте некоторые другие опечатки и ошибки.

код:

 class PlugLead:
    def __new__(self, c):
        return {c[0]:c[1]}
        
class Plugboard:
    def __init__(self):
        self.__head = 0
        self.leads = {}
    
    def add(self, item):
        if self.__head >= 10:
            print("leads already got 10 items")
        elif list(item.keys())[0] in self.leads.keys():
            print(f"leads already have this item: {item}")
        else:
            self.leads.update(item)
            self.__head  = 1
        return self.leads

    def encode(self,key):
        if key in self.leads:
            return self.leads[key]
        elif key in self.leads.values():
            return list(self.leads.keys())[list(self.leads.values()).index(key)]
        return key

plugboard = Plugboard()
plugboard.add(PlugLead("SZ"))
plugboard.add(PlugLead("GT"))
plugboard.add(PlugLead("DV"))
plugboard.add(PlugLead("KU"))
plugboard.add(PlugLead("KU"))

assert(plugboard.encode("K") == "U")
assert(plugboard.encode("U") == "K")
assert(plugboard.encode("A") == "A")

print(plugboard.encode("K"))
print(plugboard.encode("U"))
print(plugboard.encode("A"))
 

Результат:

 leads already have this item: {'K': 'U'}
U
K
A
 

Комментарии:

1. Спасибо lead_yakitori за разработку и решение этой проблемы, это очень помогает при попытке изучить Python и получить обратную связь, как вы, спасибо