-3
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
在這裏,您可以看到我嘗試使類代表一些抽象事件。這裏至關重要的是區分事件類型的能力。所以每個事件都有它的類型和基類型。完整類型是基本類型+子類型。如何使這段代碼在python 2中工作
這給像這樣定義
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()
File "/opt/leos/code/event_service/events/EventBus.py", line 38, in get_base_type return super(cls.class, cls).get_full_type() AttributeError: 'super' object has no attribute 'get_full_type'
我怎樣才能使這項工作?
它什麼時候發生這種錯誤? – thefourtheye 2015-03-31 11:54:19
使'super()。get_full_type()'成爲'super(self .__ class__,self).get_full_type()'? – adarsh 2015-03-31 11:55:03
@thefourtheye我修改了這個問題來回答這個問題。 – user1685095 2015-03-31 11:57:34