我有一個抽象基類和(Python 2.7版)中所定義如下子類:@classmethod與抽象基類
import abc
import MyDatabaseModule
class _DbObject(object):
__metaclass__ = abc.ABCMeta
def _GetObjectType(self):
raise NotImplementedError, "Please override in the derived class"
ObjectType = abc.abstractproperty(_GetObjectType, None)
class Entry(_DbObject):
_objectTypeID = 'ENTRY'
def _GetObjectType(self):
return MyDatabaseModule.DoesSomethingWith(self._objectTypeID)
ObjectType = property(_GetObjectType, None)
這工作得很好,這意味着該基類_DbObject
不能被實例化,因爲它只有一個抽象版本的屬性getter方法。
try:
dbObject = _DbObject()
print "dbObject.ObjectType: " + dbObject.ObjectType
except Exception, err:
print 'ERROR:', str(err)
現在我可以這樣做:
entry = Entry()
print entry.ObjectType
獲得訪問ObjectType
財產。不過,我想能夠做的就是:
print Entry.ObjectType
然而,無論我嘗試插入@classmethod
,我得到的錯誤classmethod object is not callabale
。