在实例之间以不同方式定义相同方法的正确方法
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.foo
与 a2.foo
不同,则意味着 a1
和 a2
不应是相同 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
参数)。
我正在尝试在 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.foo
与 a2.foo
不同,则意味着 a1
和 a2
不应是相同 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
参数)。