如何在不知道对象是什么的情况下在函数中使用对象

时间:2014-12-29 05:35:21

标签: python function object

即使我不知道对象的名称,我也想使用一个对象。我试图使用一个函数,它比较两个对象,看看哪个具有最大的数字,但我希望能够将对象键入函数的参数,然后函数进行比较,所以我不必须一遍又一遍地重复相同的代码。问题是我不知道如何在函数中有一个参数说明要比较的对象。

 class tester:
  myVar = None

  def __init__(self, myVar):
    self.myVar = myVar
  # I am not going to make everything legitamite here

def compare(first, second):
  # I want to make first = the first object i am comparing
  # second = second object i am comparing
  # I would then use it in a conditional

这可能不是解决这个问题的最佳方式,如果有更好的方式我想知道。

2 个答案:

答案 0 :(得分:2)

更简洁的方法是在您的班级中定义__cmp__()方法。这样,您可以在类实例上使用标准比较运算符< == != >等,以及内置的cmp()函数。此外,如果对象定义__cmp__(),则在传递给max()sort()等函数时,它会正常运行。 (感谢EOL提醒我提及)。

例如,

class tester(object):   
    def __init__(self, myVar):
        self.myVar = myVar

    def __cmp__(self, other):
        return cmp(self.myVar, other.myVar)


print tester(5) < tester(7)
print tester(6) == tester(6)
print tester(9) > tester(6)
print tester('z') < tester('a')
print cmp(tester((1, 2)), tester((1, 3)))

<强>输出

True
True
True
False
-1

请注意,我已将测试人员继承自object,这使其成为new-style class。这不是绝对必要的,但确实有各种好处。

我还删除了myVar = None类属性,正如EOL在评论中指出的那样是不必要的混乱。

答案 1 :(得分:-1)

你的意思是你要传递一个类的2个实例,然后比较它们的值。如果是这样,您可以按如下方式执行:

class tester:
  myVar = None
  def __init__(self, myVar):
    self.myVar = myVar

def compare(first, second):
  if first.myVar > second.myVar:
    return "First object has a greater value"
  elif first.myVar < second.myVar:
    return "Second object has a greater value"
  else:
   return "Both objects have the same value"

obj1 = tester(5)
obj2 = tester(7)

>>> print(compare(obj1, obj2))
#Output: Second object has a greater value