比较Python中创建的两个对象
我有一个类比较Python中创建的两个对象,python,Python,我有一个类doodax,它继承自另一个类DooDad。我试着看左手边,self,如果它是一个doodax实例,它将是一个不同的颜色 我遇到的主要问题是,我需要找出中的self是否是doodax实例。如果是,颜色将是绿色,如果不是,颜色将来自我继承的类 在我的测试代码中,左侧调用了doodax。这应该改变颜色为绿色,但我得到的颜色是蓝色 我可以链接我所有的代码,但是测试代码大约有114行。如果这还不够,请告诉我 class DooDadX(DooDad): def __init__(sel
doodax
,它继承自另一个类DooDad
。我试着看左手边,self
,如果它是一个doodax
实例,它将是一个不同的颜色
我遇到的主要问题是,我需要找出中的self
是否是doodax
实例。如果是,颜色将是绿色,如果不是,颜色将来自我继承的类
在我的测试代码中,左侧调用了doodax
。这应该改变颜色为绿色,但我得到的颜色是蓝色
我可以链接我所有的代码,但是测试代码大约有114行。如果这还不够,请告诉我
class DooDadX(DooDad):
def __init__(self, color, weight, value):
super().__init__(color, weight, value)
self._serial = "-" + str(self._serial)
self._name = " DooDadX "
def __mod__(self, other):
if self == DooDadX:
self._color = "green"
maxWeight = max(self._weight, other._weight)
rightValue = other._weight
newDooDadX = DooDadX(self._color, maxWeight, rightValue)
return newDooDadX
这是我的测试代码
if __name__=="__main__":
doodads = []
doodads.append(DooDad("red", 5, 10))
doodads.append(DooDad("red", 8, 9,))
doodads.append(DooDad("blue", 20, 15))
doodads.append(DooDad("green", 2, 5))
doodads.append(DooDadX("blue", 10, 12))
doodads.append(doodads[0] + doodads[1])
doodads.append(doodads[2] + doodads[0])
doodads.append(doodads[3] - doodads[1])
doodads.append(doodads[1] - doodads[3])
doodads.append(doodads[0] * doodads[1])
doodads.append(doodads[0] * doodads[2])
doodads.append(doodads[0] / doodads[3])
doodads.append(doodads[2] % doodads[4])
doodads.append(doodads[4] % doodads[2])
for doodad in doodads:
print(doodad)
更改此项:
if self == DooDadX:
据此:
if isinstance(self, DooDadX):
如果您想测试self是否是doodax
的实例,或者它是否是doodax
的任何继承类的实例,请按照@Joe的建议执行。如果要测试self是否只是doodax
的一个实例,请使用:
希望这个细微的区别能有所帮助。使用isinstance(self,derived)
您能解释一下代码应该做什么吗?它似乎在变异self
并创建一个新的doodax
。为什么这是%
的行为?如果您想知道self
是否是doodax
实例,但不是从doodax
派生的类型的实例,您可以做If self.\uuu class.\uu name.\uuuuuu=='doodax'
,但这感觉不太像Pythonic。在我的测试代码中,我有一个对象列表。这就是给我带来麻烦的一个。左边是一个doodax(在我的列表[4]中是doodax),我应该是绿色的,但是我的颜色是蓝色的。doodads.append(DooDadX(“蓝色”,10,12)doodads.append(doodads[4]%doodads[2])为什么不将颜色存储在类中?请阅读-测试代码真的没有任何帮助。这段代码有什么意义?
if type(self) == DooDadX