from abc import ABCMeta, abstractmethod
class DynamicAbstractMeta(ABCMeta):
def __new__(cls, name, bases, namespace):
if cls not in map(type, bases):
item_attributes = ["person", "animal"]
for attribute in item_attributes:
namespace[attribute] = abstractmethod(lambda x, a=attribute: None)
return super().__new__(cls, name, bases, namespace)
class A(metaclass=DynamicAbstractMeta):
pass
class Item(A):
def person(self):
print("person")
def animal(self):
print("animal")
item_instance = Item()
item_instance.person()
item_instance.animal()
ZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCgpjbGFzcyBEeW5hbWljQWJzdHJhY3RNZXRhKEFCQ01ldGEpOgogICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKICAgICAgICBpZiBjbHMgbm90IGluIG1hcCh0eXBlLCBiYXNlcyk6CiAgICAgICAgICAgIGl0ZW1fYXR0cmlidXRlcyA9IFsicGVyc29uIiwgImFuaW1hbCJdCiAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUgaW4gaXRlbV9hdHRyaWJ1dGVzOgogICAgICAgICAgICAgICAgbmFtZXNwYWNlW2F0dHJpYnV0ZV0gPSBhYnN0cmFjdG1ldGhvZChsYW1iZGEgeCwgYT1hdHRyaWJ1dGU6IE5vbmUpCiAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpCgpjbGFzcyBBKG1ldGFjbGFzcz1EeW5hbWljQWJzdHJhY3RNZXRhKToKICAgIHBhc3MKCmNsYXNzIEl0ZW0oQSk6CiAgICBkZWYgcGVyc29uKHNlbGYpOgogICAgICAgIHByaW50KCJwZXJzb24iKQoKICAgIGRlZiBhbmltYWwoc2VsZik6CiAgICAgICAgcHJpbnQoImFuaW1hbCIpCgppdGVtX2luc3RhbmNlID0gSXRlbSgpCml0ZW1faW5zdGFuY2UucGVyc29uKCkKaXRlbV9pbnN0YW5jZS5hbmltYWwoKQ==