Vitaliy
Vitaliy

Reputation: 411

Python 3 ignores metaclass directive?

Edited

I have 2 classes inheriting from ABC, and a third class inheriting from both, each in a different file. Tried to provide the metaclass of ABCMeta to the last class, to resolve the conflict of metaclasses, but it fails with the same

"TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases"

Why does python ignore the metaclass directive in this case, and how to resolve it?

file A:

from abc import ABC, abstractmethod

class A(ABC):
    @abstractmethod
    def method1(self):
       pass

file B:

from abc import ABC, abstractmethod

class B(ABC):      
    @abstractmethod
    def method2(self):
       pass

file C:

import A
import B
class C(A,B,metaclass=ABCMeta):
    def method1(self):
       pass
    def method2(self):
       pass

Upvotes: 0

Views: 187

Answers (1)

Vitaliy
Vitaliy

Reputation: 411

The problem stems from wrong import. file C should be:

from A import A
from B import B
class C(A,B):
   def method1(self):
      pass
   def method2(self):
      pass

Credit should go to @Matthias & @Giacomo Alzetta, who pointed out that the MCVE works for them.

Upvotes: 1

Related Questions