Python Удаление метода родительского класса и восстановление с помощью декоратора после инициации - PullRequest
0 голосов
/ 07 февраля 2020

Попытка удалить метод split из дочернего класса после init . Провел мое исследование, но не смог найти ответы ... Я знаю, что на самом деле есть более очевидные решения, чем удаление и восстановление метода, но я принципиально хочу знать, что, черт возьми, не так ... Помогите, пожалуйста! ps извините за код начального уровня ниже:


def remove_base_function(base_class,method):
    def inner_decorator(function):
        def final_wrapper(base_class,method): 
            save = method
            del method
            function()
            setattr(base_class, method.__name__ , save)        
        return final_wrapper
    return inner_decorator    

class Deck:

    def __init__(self,cards):
        self.cards = cards

    def __str__(self):
        #Creating a string from list which is generated from imported list's elements.
        return "".join([f"{b} of {a}\n" for a,b in self.cards])

    def __len__(self):
        return len(self.cards)

    def shuffle(self):
        shuffle(self.cards)
        print('Deck has been shuffled!')

    def split(self):
        half = len(self.cards)//2
        self.deck1 = self.cards[0:half]
        self.deck2 = self.cards[half-1:-1]
        print('Deck is split into 2')

class Hand(Deck):         

    @remove_base_function(Deck,Deck.split)
    def __init__(self,cards):        
        super().__init__(cards)


    def add(self,new_cards):
        self.cards.extend(new_cards)

    def remove(self):
        return self.cards.pop() 
...