有没有一种方法可以在python中为类的所有实例运行方法?

jak*_*503 4 python methods class

示例代码:

>>> class MyClass(object):
        def __init__(self, x, y):
            self.x = x
            self.y = y
        def power(self):
            print(self.x**self.y)
        def divide(self):
            print(self.x/self.y)

>>> foo = MyClass(2, 3)
>>> bar = MyClass(4, 7)
>>> 
>>> foo.power()
8
>>> bar.divide()
0.5714285714285714
Run Code Online (Sandbox Code Playgroud)

每当我以前在Python中使用类时,我都会分别为每个实例运行方法(请参见上文)。我只是想知道是否有一种方法可以一次为该类的所有实例运行相同的方法,因为如果您有20个左右的实例,它可能会令人讨厌。我在想这样的事情:

>>> allinstances.power()
8
16384
Run Code Online (Sandbox Code Playgroud)

有办法吗?

Amb*_*ber 5

通常不行。您可以使您的班级能够做到这一点,但是:

GLOBAL_MYCLASS_LIST = []

class MyClass(object):

    def __init__(self, x, y):
        GLOBAL_MYCLASS_LIST.append(self)
        self.x = x
        self.y = y

    def power(self):
        print(self.x**self.y)

    def divide(self):
        print(self.x/self.y)

a = MyClass(2, 3)
b = MyClass(4, 7)
all_powers = [i.power() for i in GLOBAL_MYCLASS_LIST]
Run Code Online (Sandbox Code Playgroud)

当然,您也可以在不将其烘焙到类中的情况下执行此操作,这在大多数情况下可能具有不同的MyClasses 集,这可能更干净:

myclass_list = []

class MyClass(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def power(self):
        print(self.x**self.y)

    def divide(self):
        print(self.x/self.y)

myclass_list.append(MyClass(2, 3))
myclass_list.append(MyClass(4, 7))
all_powers = [i.power() for i in myclass_list]
Run Code Online (Sandbox Code Playgroud)


Hol*_*rel 5

class MyClass(object):

    instancelist = []

    def __init__(self, x, y):
        self.x = x
        self.y = y
        MyClass.instancelist.append(self)

    def power(self):
        print(self.x ** self.y)

    def divide(self):
        print(self.x / self.y)


foo = MyClass(2, 3)
bar = MyClass(4, 7)

[instance.power() for instance in MyClass.instancelist]
Run Code Online (Sandbox Code Playgroud)

将输出:

8
16384
Run Code Online (Sandbox Code Playgroud)

这样您就不需要任何存储在类定义之外的全局变量或占位符。