Python将self更改为继承的类

2024-01-09

我有这样的结构:

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()

'a' 现在是 Foo 的一个实例
现在我想通过使用“changeToGoo”方法将其更改为 Goo 的实例,并添加其他值。

在 Python 中如何做到这一点?

我努力了:

self.__class__ = Goo

但是当我检查时:

type(a)

它仍然是太,而不是好。


在 Python 2 中,使Foo继承自object使其成为一个新式的类:

>>> 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'>

Now you can change self.__class__. In a changeToGoo() method:

def changeToGoo(self)
    self.__class__ = Goo
    self.val2 = 'some value'

或重复使用__init__:

def changeToGoo(self)
    self.__class__ = Goo
    self.__init__(self.val1, 'some value')

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python将self更改为继承的类 的相关文章

随机推荐

  • 交错?锁链?由一系列不同的delay()和duration()的d3转换寻址的单个DOM元素

    正如所解释的here http bost ocks org mike transition per element 您可以安排连续的转换驱动的属性值更改singleelement 使用transition transition 它创建一个新
  • 从另一个页面的代码隐藏中获取 ASP.Net 页面的 URL

    我试图从页面对象中找到确定页面 url 的方法 看来你只能获取当前上下文的路径 一个页面可以有多个 url 例如 我家里有一台服务器正在运行 并且该站点的 URL 根据我从何处查看而有所不同 当我在家时 我只使用内部服务器名称 这样流量就不
  • Java 9 中的 native2ascii 可执行文件发生了什么

    我正在尝试使用 java 9 编译我的应用程序 但它失败了 因为 native2ascii 可执行文件不存在 Java 9 中删除了吗 还有其他工具可以做同样的事情吗 是的 native2ascii 在 Java 9 中被删除了 错误报告以
  • 从 url 到 JSON 到 HTML

    我目前正在尝试学习 RESTful API 并将它们实现到用例中 我想做的一件事是将带有 json 有效负载的 url 从一台服务器加载到单独的 Web 服务器中 以在表上显示数据 我对此不太熟悉 所以我试图找到最好的方法来做到这一点 我正
  • 如何在C++中创建具有动态对齐要求的对象?

    C 中分配和使用具有动态指定对齐方式的缓冲区的正确方法是什么 我想到的用例是 Vulkan 动态统一缓冲区 请参阅上一个问题 https stackoverflow com q 45458918 9723177其中抽象地讨论了所需的过程 其
  • 如何在 JavaScript 中监听三次点击?

    如果这是双击 window addEventListener dblclick function event false 如何捕捉三次点击 这适用于 Google Chrome 中的固定选项卡 您需要编写自己的三次点击实现 因为不存在可以捕
  • 与 Sql Geometry 字段不同的棘手 sql

    我有一个与以下不兼容的sql语句Sql Geometry输入所以我正在尝试修改它以使其正常工作 它的基本要点是这样的 Select distinct A B C D SHAPE FROM TABLE1 UNION SELECT A B C
  • 如何在Python中按下某个键时停止程序?

    我有一个无限循环的程序 每 5 秒打印一次 程序正在运行 我想在按结束键时停止它 因此 我创建了一个按键侦听器 如果按下结束键 该侦听器将返回 false 如果我没有无限循环 那应该可行 即使我处于无限循环中 我也希望它能够工作 这是我的代
  • TabControl / TabPanel / TabItem 的 WPF 样式

    这是关于 WPF TabControl TabItem 和 TabPanel 的新手问题 StackOVF 上有一个相关问题 我很高兴在我的应用程序中使用了一个答案 这是答案的链接以及代码片段 WPF TabControl 中的中心 Tab
  • Yii2 isGuest 在控制台应用程序中给出异常

    在我使用时的控制台应用程序中Yii app gt user gt isGuest它给出了以下例外 Exception yii base UnknownPropertyException with message Getting unknow
  • Ifstream 读取函数未加载到向量中

    我对编程有点陌生 所以我不确定如何搜索这个问题 而且我知道我问了另外两个关于这个问题的问题 但我似乎无法让它工作 我遇到了一个问题 我有一个向量 vector
  • 引用的程序集 Dapper 没有强名称

    我从 NuGet 安装了 dapper 当我尝试编译代码时出现错误 引用的程序集 Dapper 没有强名称 这是什么原因造成的 您看到该错误是因为您使用的包没有强名称 即它不使用签名 签名可确保程序集的真实性 看不签署 NET 程序集有什么
  • 如何在gitlab-ci脚本中执行git命令

    我想更改文件并在 gitlab ci 管道内提交更改 我尝试在脚本中编写普通的 git 命令 script git clone email protected cdn cgi l email protection cd project fi
  • 解包从函数返回的可变长度列表

    好的 我正在定义一个函数 它接受可变数量的输入并限制每个输入 def clamp args return max min arg 0 8 0 2 for arg in args 我喜欢这个函数的可读性 a 0 12 b 0 45 c 0 9
  • Rails 5.1 capistrano 在 webpacker 编译资产时陷入困境

    我正在尝试使用 capistrano 部署 Rails 5 1 应用程序 但它似乎陷入了编译资产的困境 02 38 deploy assets precompile 01 HOME rbenv bin rbenv exec bundle e
  • 从我们按下键盘上的一个键的那一刻起,直到它出现在您的Word文档中,会发生什么[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题是在我的工作面试中 我只是想看看我是否提供了所有细节 机械开关短路将R1电阻端上拉至地 特殊的多路复用器将其转换为消息 以减少线路数量 由键盘
  • NSMutableArray 删除对象会增加引用计数吗?

    我有一些代码导致 iOS 静态库内存泄漏 以下是 Instruments 中对象的生命周期 Category Event Type Timestamp RefCt Address Size Responsible Library Respo
  • 我可以在审批过程中将我的应用程序保留在 Testflight 中吗

    有谁知道您是否可以在审批过程中将您的应用程序保留在 TestFlight 中 是的你可以 在您的应用程序启动后 它甚至会在 30 天的时间限制内保留在 TestFlight 中
  • 如何直接查看SVN外部URL?

    我有一个包含一些客户端文件的 Subversion 存储库 某些客户端将使用标准文件 但其他客户端将提供文件的自定义版本 为了适应这一点 我对将使用共享文件的客户端使用了 svn externals 所以我们的结构是这样的 svn top
  • Python将self更改为继承的类

    我有这样的结构 class Foo def init self val1 self val1 val1 def changeToGoo self HOW class Goo Foo def init self val1 val2 super