gpt4 book ai didi

python - 如何在 Python 2 中重用另一个类的方法而无需继承?

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:24 24 4
gpt4 key购买 nike

我的两个类需要具有相同的方法,但它们不通过继承相关。

以下内容在 Python 3 中有效:

class A(object):
def __init__(self):
self.x = 'A'

def printmyx(self):
print(self.x)

class B(object):
def __init__(self):
self.x = 'B'

printmyx = A.printmyx

a = A()
b = B()

a.printmyx()
b.printmyx()

和打印

A
B

但是,在 Python 2 中我得到了

Traceback (most recent call last):
File "py2test.py", line 18, in <module>
b.printmyx()
TypeError: unbound method printmyx() must be called with A instance as first argument (got nothing instead)

我认为问题在于,在 Python 3 中 printmyx 只是一个常规函数,而在 Python 2 中它是一个未绑定(bind)的方法。

如何使代码在 Python 2 中工作?

编辑

在我的真实代码中,AB 继承自不同的父类。它们需要共享一种辅助方法,但彼此之间没有其他关系。

最佳答案

请记住,Python 确实支持多重继承,因此很可能定义一个 mixin 类并让 A 和 B 都继承它,而不会干扰主继承层次结构。我明白你是说这些类没有什么共同点 - 但它们都有一个名为 x 的变量和一个打印它的方法 - 至少对我来说,这足以考虑使用继承。

但是,另一种方法是使用类装饰器来添加公共(public)方法:

def add_printmyx(original_class):
def printmyx(self):
print (self.x)
original_class.printmyx = printmyx
return original_class

@add_printmyx
class B(object):
def __init__(self):
self.x = 'B'

b = B()
b.printmyx()

类装饰器采用原始类并添加(或替换)打印 x 内容的 printmyx 方法。

关于python - 如何在 Python 2 中重用另一个类的方法而无需继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com