所以在我的pygame游戏中,我创建了一个对象列表,以便更新所有对象并更轻松地进行碰撞检查。所以当我进行碰撞检查时,我必须检查当前对象是否与我们碰撞检查的对象相同。这是我目前的代码:
def placeMeeting(self, object1, object2):
# Define positioning variables
object1Rect = pygame.Rect(object1.x, object1.y, object1.width, object1.height)
# Weather or not they collided
coll = False
# Loop through all walls to check for possible collision
for i in range(len(self.instances)):
# First check if it's the right object
if (self.instances[i] == object2):
print "yep"
object2Rect = pygame.Rect(self.instances[i].x, self.instances[i].y, self.instances[i].width, self.instances[i].height)
# Check for collision with current wall -- Horizontal
if (object1Rect.colliderect(object2Rect)):
coll = True
# Return the final collision result
return coll
(列表/数组中的所有对象都是su的子对象)
答案 0 :(得分:6)
简单但功能强大=> type(a) is type(b)
>>> class A:
... pass
...
>>> a = A()
>>> b = A()
>>> a is b
False
>>> a == b
False
>>> type(a)
<class '__main__.A'>
>>> type(b)
<class '__main__.A'>
>>> type(a) is type(b)
True
>>> type(a) == type(b)
True
>>>
答案 1 :(得分:4)
您可以使用type()
功能检查变量的类型。所以你的代码如下:
if(type(self.instances[i]) is MyCustomType):
这会检查instance[i]
是否属于MyCustomType
类型。您可以将此替换为内置类型,例如dict
,list
,int
,str
等,或者它可以是您声明的自定义类型/对象。
重要的是要注意它只会检查对象类型而不是对象的值。因此,它不会看到两个对象是否具有相同的值。
当我们进行继承时,这也有点棘手,所以在这个答案中有更多的例子Determine the type of an object?
另请注意本答案的注释,就好像您使用的是Python 2.x而不是在声明自定义类时从object
继承此解决方案可能无效。
如果您想知道类的两个实例是否具有相同的值,则必须在类定义中实现__eq__
函数/方法。有关详细信息,请参阅回答Is there a way to check if two object contain the same values in each of their variables in python?。
答案 2 :(得分:2)
除了之前回答中的type
方式,我认为您可以使用isinstance
。 https://docs.python.org/2/library/functions.html#isinstance
如果a和b是相同的对象,则运算符is
可用于对象检查,例如a is b
。请记住is
仅检查对象而不检查其值。或者,我没有看到有人这样做,我猜id(obj1) == id(obj)
当你需要检查两个对象是否相同时也能正常工作。