gpt4 book ai didi

python - 在 Python 中更改对象的父类(super class)

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

我在阅读有关 Python 中的反射的文章时遇到了这个语句:

Structural Reflection. It is possible to modify the set of methods a class offers and the set of field an object has. We can also modify the class an object is instance of, and the set of super-classes a class inherits from.

这是在这个 here 上声明的.

我尝试实现一个可以在 Python 中修改实例类的示例:

class Child():
nmbrMovies = 0
nmbrBooks = 3

class Adult():
nmbrMovies = 2
nmbrBooks = 5

class Member(Child):
pass

我想让 Member 类的一个实例说 x,它最初继承自 Child 类,因此继承了可以在虚构图书馆中租借的最大数量的电影和书籍。当此人/成员成为 Adult 时,我想简单地将成员的父类(super class)更改为 Adult。我知道这不是实现这种结构的简单方法,但我想要一个示例来测试 Python 的此功能。

有人知道我想做的事情是否可行吗?还是我误解了 Python 的那个属性?

最佳答案

class Child():
nmbrMovies = 0
nmbrBooks = 3

class Adult():
nmbrMovies = 2
nmbrBooks = 5

class Member(Child):
pass

x = Member()

Member 开始继承自 Child:

print(Member.__bases__)
# (<class __main__.Child at 0xb74a141c>,)

可以将其更改为Adult:

Member.__bases__ = (Adult,)
print(Member.__bases__)
# (<class __main__.Adult at 0xb74a144c>,)

现在 x.nmbrMovies 找到 Adult.nmbrMovies:

print(x.nmbrMovies)
# 2

也可以更改实例的类。 x 开始时是 Member 的一个实例:

print(x.__class__)
# __main__.Member

但我们可以将其更改为 Child:

x.__class__ = Child
print(x.nmbrMovies)
# 0

关于python - 在 Python 中更改对象的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249793/

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