首页 > 解决方案 > 取消包装或取消继承对象

问题描述

我无权访问的代码块返回一个我想要恢复的“包装”或更确切地说从基类继承的对象。包装是有害的,我想摆脱它。有没有办法向上转换到父类?解开对象?剥夺它?

我准备了一个简单的例子:是否有可能以u一种对象的方式操纵Person对象并以一种很好的方式打招呼?

class Person():
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("Hi, my name is " + self.name)

class Unfriendly_Person(Person):
    def say_hello(self):
        print("Leave me alone!")

u = Unfriendly_Person("TJ")
u.say_hello()

标签: python

解决方案


你可以分配给__class__,所以

class Person():
    def __init__(self, name):
        self.name = name
    def say_hello(self):
        print("Hi, my name is " + self.name)

class Unfriendly_Person(Person):
    def say_hello(self):
        print("Leave me alone!")

u = Unfriendly_Person("TJ")
u.__class__ = Person
u.say_hello()

输出:

Hi, my name is TJ

但是请记住,这将抛弃所有方法,Unfriendly_Person即使是那些未在Person.


推荐阅读