[英]change the superclass of object in Python
我正在阅读有关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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.