首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python将self更改为继承类

Python将self更改为继承类
EN

Stack Overflow用户
提问于 2013-12-21 19:26:41
回答 2查看 1.3K关注 0票数 4

我有这样的结构:

代码语言:javascript
运行
复制
class Foo:
    def __init__(self, val1):
        self.val1 = val1

    def changeToGoo(self)
        HOW???

class Goo(Foo):
    def __init__(self, val1, val2):
        super(val1)
        self.val2 = val2

a = Foo(1)
a.changeToGoo()

‘’现在是Foo的一个实例

现在,我希望通过使用"changeToGoo“方法将其更改为Goo的一个实例,并添加其他值。

如何在Python中做到这一点?

我试过:

代码语言:javascript
运行
复制
self.__class__ = Goo

但当我查到:

代码语言:javascript
运行
复制
type(a)

它仍然是福,而不是咕。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-21 19:28:53

在Python2中,让Foo继承object,使其成为一个新样式的类:

代码语言:javascript
运行
复制
>>> class Foo(object):
...     def __init__(self, val1):
...         self.val1 = val1
... 
>>> class Goo(Foo):
...     def __init__(self, val1, val2):
...         super(val1)
...         self.val2 = val2
... 
>>> f=Foo(1)
>>> f.__class__
<class '__main__.Foo'>
>>> f.__class__ = Goo
>>> f
<__main__.Goo object at 0x10e9e6cd0>
>>> type(f)
<class '__main__.Goo'>

现在您可以更改self.__class__了。在changeToGoo()方法中:

代码语言:javascript
运行
复制
def changeToGoo(self)
    self.__class__ = Goo
    self.val2 = 'some value'

或者重复使用__init__

代码语言:javascript
运行
复制
def changeToGoo(self)
    self.__class__ = Goo
    self.__init__(self.val1, 'some value')

这确实会使您的对象变得有些可怕,因为它们会改变身份。变形很少是个好主意。您可能需要重新考虑您的用例。

票数 6
EN

Stack Overflow用户

发布于 2013-12-21 19:29:39

你可以这样做:

代码语言:javascript
运行
复制
def changeToGoo(self, val2):
    return Goo(self.val1, val2)

然后调用和分配,添加额外的属性

代码语言:javascript
运行
复制
a = a.changeToGoo(val2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20722714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档