0

Допустим, у меня есть,Как ограничить разрешение метода только одним родителем в множественном наследовании python?

class A(object): 
    def __init__(self, var): 
     print("The parent class is A") 
    def methodA(self): 
     print("This method should only be accessed by a child of class A") 

class B(object): 
    def __init__(self, var): 
     print("The parent class is B") 
    def methodB(self): 
     print("This method should only be accessed by a child of class B") 

class C(A, B): 
    def __init__(self, var): 
     # if var=='a': 
     #  make this class the child of only class A 
     #  i.e. it should only access methods of class A 
     #  and forget methods of class B. 
     # if var=='b': 
     #  make this class the child class B 
     #  i.e. it should only access methods of class B 
     #  and forget methods of class A. 
     pass 

Как я могу добиться этого? Точно говоря, я хочу создать класс, полученный из двух классов, но в зависимости от входного параметра я хочу отключить один из классов и использовать атрибуты только другого класса. Так что я получаю это,

>>> c = C('a') 
>>> c.methodA() 
This method should only be accessed by a child of class A 
>>> c.methodB() 
# A not implemented error or a maybe a custom error message. 
+1

Помимо переопределения обоих методов в C, я не вижу хорошего способа сделать это. Вопрос в том, почему вы хотите это сделать. – Paul

+0

Это звучит неплохо. Вы уверены, что не хотите иметь, скажем, заводскую функцию, которая возвращает экземпляр 'A' или экземпляр' B'? Наследование - это не всегда ответ. – user2357112

ответ

0

Если вы хотите сделать это, я бы рекомендовал фабричный подход, предложенный user2357112 в комментариях:

def C(parameter): 
    if parameter == "a": 
     return(A()) 
    else: 
     return(B()) 

Конечно, это не подклассы, так что если вы хотите добавить к нему методы/атрибуты, вам понадобится немного больше магии. Вы могли бы реализовать это через метаклассы.

Смежные вопросы