在Python中更改object的超类



我正在阅读Python中的反射,并看到了这样的语句:

结构反射。可以修改类提供的方法集和对象具有的字段集。还可以修改对象的实例类,以及类继承的超类集。

在这里说明。

我试图实现一个例子,我可以在Python中修改实例的类:

class Child():
    nmbrMovies = 0
    nmbrBooks  = 3
class Adult():
    nmbrMovies = 2
    nmbrBooks  = 5
class Member(Child):
    pass

,我想有一个成员类的实例,例如,x,它最初继承自Child类,因此继承了可以在虚拟图书馆中出租的最大数量的电影和书籍。当人/成员成为Adult时,我想简单地将成员的超类更改为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

相关内容

  • 没有找到相关文章

最新更新