我在python中有以下几个类:
QueryElement
作为根类ElemMatch
和{我在ElemMatch
类中有一个列表,它应该有QueryElement
的实例。在
我的问题是从列表中的实例调用一个名为compute
的方法,该方法位于ElemMatch
类(compute method)中。我不知道如何在列表中指定一个Python类型。我在Java中没有这样的问题,因为我可以“强制转换”成我喜欢的类型,但在这里我不知道如何解决它。在
如果你能帮忙,我很感激。在
class QueryElement(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def addQueryElement(self, queryElement):
raise NotImplementedError( "Should have implemented this" )
@abc.abstractmethod
def compute(self):
raise NotImplementedError( "Should have implemented this" )
class ElemMatch(QueryElement):
def __init__(self):
self._queryElements = []
def addQueryElement(self, queryElement):
self._queryElements.append(queryElement)
def compute(self):
elemMatch = {}
if len (self._queryElements) > 0:
elemMatch['e'] = self._queryElements[0].compute()
return elemMatch
class GT(QueryElement):
def __init__(self):
print 'someThing'
def addQueryElement(self, queryElement):
return None
def compute(self):
print 'compute GT!'
class PALLAS(object):
def foo(self):
gt = GT()
elemMatch = ElemMatch()
elemMatch.addQueryElement(gt)
elemMatch.compute()
p = PALLAS()
p.foo()
在Python中,对象是类型化的,而不是引用它们的名称。如果对象有一个
compute
方法,则可以调用它,而不管对象的类型是什么。在一个简单的例子:
lst
的每个元素都是A
或{foo
的方法,所以您不必每次通过循环都知道l
引用的对象的类型;foo
的查找将找到正确的方法。在这通常被称为duck-typing;如果
l
看起来像一个duck,并且行为类似于一个duck(即,如果它有一个方法foo
),那么它就是一个duck(即,我们可以调用方法foo
)。在相关问题 更多 >
编程相关推荐