如何在Python中替换基类

问题描述 投票:0回答:1

这是代码:

Class A: pass

Class B: pass

Class Example(A, B): pass
    ...a lot of method

# new class B called BPlus
Class BPlus: pass

# want a new class Example that base on (A, BPlus) but not copy old Example's method.
Class Example(A, BPlus)
    ...here do not copy method

# try change __base__ but got 'readonly attribute' error
Example.__base__ = (A, BPlus)

如何在不复制重复代码的情况下更改基类。

python replace metaclass base-class
1个回答
0
投票

您的问题写得不正确,但它确实有一个简短的答案: 您可以更改 Python 定义的类的

__bases__
属性,只要旧的或新的基类都没有“不同的布局” - 这意味着它们在内置级别的定义没有不同的字段,并且它们没有使用
__slots__

因此,使用您的命名,但实际上带有一个完美有效的片段:


class A:
    ...

class B:
    ...

class BPlus(B):
    def test(self):
       print(42)

    ...


class Example(A, B):
    ...

print(Example.__bases__)
# (A, B)

A.__bases__ = A, BPlus

print(Example.__bases__)
# (A, BPlus)
Example().test()
# 42
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.