簡體   English   中英

在Python中更改對象的超類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM