在实例之间以不同方式定义相同方法的正确方法

Correct way to have the same method defined differently between instances

我正在尝试在 Python 中创建一个 class,其方法在不同实例之间的定义不同(使用相同的名称)。不同的定义可能基于创建实例时对 class 的输入。

例如:

Class A:
     def __init__(self, a):
         ...

     def foo(self):
         ...

a1 = A(input1)
a2 = A(input2)
a1.foo()
a2.foo()

我希望 foo() 对这两个实例有不同的定义。我可以将此逻辑编码到 foo 方法中,但想知道是否有更简洁或更 Pythonic 的方法来执行此操作。 谢谢

I would want foo() to be defined differently for these two instances

你真的不想要那个。我无法开始想象这将导致的调试噩梦。

如果 a1.fooa2.foo 不同,则意味着 a1a2 不应是相同 class

的实例

使用 subclasses 并在每个 class 中适当地实施 foo

Class Common:
    # common stuff
    ...

Class A1(Common):
    def foo(self):
        print('a1.foo')

Class A2(Common):
    def foo(self):
        print('a2.foo')

a1 = A1()
a2 = A2()
a1.foo()
# 'a1.foo'
a2.foo()
# 'a2.foo'

不能那样做。但是您始终可以即时向对象添加自定义属性。

class A:
    def __init__(self, x):
        self.x = x

a1 = A()
a2 = A()

def foo1():
    # you can't use self.x
    print("a1")

a1.foo = foo1
a2.foo = lambda : print("a2")

a1.foo() # a1
a2.foo() # a2

但这不是一个好习惯,使用它需要您自担风险。

此外,正如评论中所指出的,您无权访问实例属性(因为没有隐式 self 参数)。