如何为一个类的方法创建一个方法,该类将类的多个对象作为参数?

时间:2017-02-05 22:41:23

标签: python function class decorator static-methods

我想在一个类中定义一个特殊的方法,该类将类的两个实例作为参数。我还希望能够使用 method(object_a, object_b) 而不是object_a.method(object_b)来调用此功能。让我举一个例子来说明:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def inside_class_age_diff(self, other):
        return abs(self.age - other.age)


def outside_class_age_diff(person_a, person_b):
    return abs(person_a.age - person_b.age)

Romeo = Person("Romeo", 20)
Juliet = Person("Juliet", 18)
print(Romeo.inside_class_age_diff(Juliet))
print(outside_class_age_diff(Romeo, Juliet))

因此,在上面的示例中,outside_class_age_diff()将类Person的两个对象作为参数,但是它在类之外定义,这对我来说感觉不对,因为它显然是属于班Person。另一方面,即使在类内部定义了inside_class_age_diff(),也需要使用带有该类对象的点符号来调用它,这不是很整洁。

那么,我怎样才能让inside_class_age_diff(Romeo, Juliet)工作?有可能吗?

2 个答案:

答案 0 :(得分:1)

好像你正在玩设计模式。您要找的是static method

您可以这样定义:

class Person:
    def __init__(self, name, age):
        ...

    def inside_class_age_diff(self, other):
        ...

    @staticmethod
    def outside_class_age_diff(person_a, person_b):
        return abs(person_a.age - person_b.age)

然后您可以这样使用它:

Person.inside_class_age_diff(Romeo, Juliet)

它仍然是类的方法,因此需要这样调用。

答案 1 :(得分:1)

您可以使用静态方法:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod    
    def inside_class_age_diff(person_a, person_b):
        return abs(person_a.age - person_b.age)



Romeo = Person("Romeo", 20)
Juliet = Person("Juliet", 18)
print(Romeo.inside_class_age_diff(Romeo, Juliet))

静态方法就像普通函数一样,即它不绑定到实例。因此,第一个论点不会以任何方式对待。