我想在一个类中定义一个特殊的方法,该类将类的两个实例作为参数。我还希望能够使用 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)
工作?有可能吗?
答案 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))
静态方法就像普通函数一样,即它不绑定到实例。因此,第一个论点不会以任何方式对待。