gpt4 book ai didi

Python 3 动态分配基类

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:30 25 4
gpt4 key购买 nike

我正在编写一个简单的国际象棋程序来练习我在 python 3 中的 OOP,并且想知道如何动态更改(在创建类之前)类定义的基类。我的类(class)结构是这样的。

  • 抽象Piece类->各种派生的pieces
  • Board 类,具有派生 Pieces 和 8x8 矩阵的组合,以及一些方法
  • 抽象接口(interface)类 -> CLI 或
  • 抽象接口(interface)类 -> GUI(也是 Tkinter 的子类)
  • 游戏类(用于处理游戏逻辑和主循环),目前有一个 Board 类成员。

我最初将 Game 类实现为具有在 init 期间定义的接口(interface)数据成员,但我发现自己将大量其他内部 Game 数据发送到接口(interface)复合成员。我觉得让 Game 类成为任一 Interface 子类的子类会更优雅,这样它就可以直接访问它们的方法(并使它们抽象)。

但是我想要一个可以动态执行此操作的 Game 类版本,这样我就不必对它进行两次编码或从两者继承,也不必在运行时决定使用哪个基类。我目前通过将 Game 类嵌套在这样的函数中来完成此操作。

def Game(ui):
class Game(ui):
...
return Game()

糟糕的命名是我不喜欢这个解决方案的部分原因。我希望能够自行调用 Game 类,而无需明确使用或承认我正在做任何异常的事情。

有没有办法用元类或类装饰器来做到这一点?我只能让它们影响类属性,而不是父类。

最佳答案

class 语句是

的“语法糖”
type(name, bases, dict)

您可以像这样使用 type 创建这样一个动态类

>>> class ui():
... def start(self): print("Started!")
...
>>> Game = type("Game", (ui,), {})
>>> game = Game()
>>> game.start()
Started!

关于Python 3 动态分配基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660125/

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