Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中更改对象的超类_Python_Reflection - Fatal编程技术网

在Python中更改对象的超类

在Python中更改对象的超类,python,reflection,Python,Reflection,我在阅读Python中的反射时遇到了以下语句: 结构反射。可以修改类提供的方法集和对象具有的字段集。我们还可以修改对象的实例类,以及类继承自的超类集 这是写在这上面的 我尝试实现一个示例,在该示例中,我可以修改Python中实例的类: class Child(): nmbrMovies = 0 nmbrBooks = 3 class Adult(): nmbrMovies = 2 nmbrBooks = 5 class Member(Child):

我在阅读Python中的反射时遇到了以下语句:

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

这是写在这上面的

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

class Child():
    nmbrMovies = 0
    nmbrBooks  = 3

class Adult():
    nmbrMovies = 2
    nmbrBooks  = 5

class Member(Child):
    pass
我希望有一个成员类的实例,比如说,
x
,它最初从子类继承,从而继承可以在虚拟图书馆中出租的最大数量的电影和书籍。当person/member成为
成人
时,我只想将member的超类更改为
成人
。我知道这不是实现这种结构的简单方法,但我想要一个例子来测试Python的这种功能

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

class Child():
    nmbrMovies = 0
    nmbrBooks  = 3

class Adult():
    nmbrMovies = 2
    nmbrBooks  = 5

class Member(Child):
    pass

x = Member()
成员
子项开始继承:

print(Member.__bases__)
# (<class __main__.Child at 0xb74a141c>,)
x.__class__ = Child
print(x.nmbrMovies)
# 0
现在
x.nmbrMovies
找到
成人.nmbrMovies

print(x.nmbrMovies)
# 2
还可以更改实例的类
x
成员的一个实例开始:

print(x.__class__)
# __main__.Member
但是我们可以把它改成:
孩子

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

谢谢你的回答。特别是比较一个类的超类和一个类的实例的变化是非常有帮助的。