class Event(metaclass=ABCMeta):
def __init__(self):
self.type = self.get_full_type()
@classmethod
def get_full_type(cls):
return None
def as_dict(self):
return self.__dict__
class BaseEvent(Event, metaclass=ABCMeta):
SUB_TYPE = ''
@classmethod
def get_base_type(cls):
return super().get_full_type()
@classmethod
def get_full_type(cls):
base_type = cls.get_base_type()
if base_type:
return '.'.join([base_type, cls.SUB_TYPE])
else:
return cls.SUB_TYPE
在这里你可以看到我尝试创建代表一些抽象事件的类。这里至关重要的是区分事件类型的能力。所以每个事件都有它的类型和它的基本类型。完整类型是基本类型+子类型。
这使得能够定义像这样的新事件类型
class MockEvent(BaseEvent):
SUB_TYPE = 'mock'
def __init__(self, some_object):
super(self.__class__, self).__init__()
self.some_object = some_object
所以完整类型镜像了类层次结构ClassA.ClassB.ClassC等。我想你明白了。
不幸的是,这不适用于python 2
class Event(object):
__metaclass__ = ABCMeta
SUB_TYPE = None
def __init__(self):
self.type = self.get_full_type()
@classmethod
def get_base_type(cls):
return None
@classmethod
def get_full_type(cls):
base_type = cls.get_base_type()
if base_type:
return '.'.join([base_type, cls.SUB_TYPE])
else:
return cls.SUB_TYPE
def as_dict(self):
return self.__dict__
class BaseEvent(Event):
__metaclass__ = ABCMeta
SUB_TYPE = ''
@classmethod
def get_base_type(cls):
return super(cls.__class__, cls).get_full_type()
文件“/opt/leos/code/event_service/events/EventBus.py”,第38行, get_base_type return super(cls。 class ,cls).get_full_type() AttributeError:'super'对象没有属性'get_full_type'
我该如何做到这一点?
答案 0 :(得分:0)
class Event(object):
__metaclass__ = ABCMeta
def __init__(self):
self.type = self.get_full_type()
@classmethod
def get_full_type(cls):
return None
def as_dict(self):
return self.__dict__
class BaseEvent(Event):
__metaclass__ = ABCMeta
SUB_TYPE = None
@classmethod
def get_full_type(cls):
super_type = cls.get_super_type()
base_type = super_type.get_full_type()
if base_type:
return '.'.join([base_type, cls.SUB_TYPE])
else:
return cls.SUB_TYPE
@classmethod
def get_super_type(cls):
return cls.__base__
我需要自动获取基本类型。没有提到super中的当前类(currectClass,self)所以我使用了cls。 base 并且它正常工作。