【问题标题】:Python - How do I call class method from another newly modified python filePython - 如何从另一个新修改的 Python 文件中调用类方法
【发布时间】:2019-04-24 05:59:29
【问题描述】:

我是 python 编程新手,想寻求帮助,从另一个新修改的 python 文件调用方法。

我目前有 3 个 python 文件:main.py、addBody.py 和 originalBody.py。

addBody 将在每次迭代中将一段主体添加到 originalBody.py 中。这是通过读写函数完成的。

例如,

在第一次迭代中(从 main.py 开始),originalBody.py 将如下所示:

class BODY:
    def __init__(self):
        object1 = send_cylinder(length = 1.0, radius = 0.1)
        bodySegment = {}
        bodySegment[0] = 1  #one body

在第二次迭代中,originalBody.py 将自动变为:

class BODY:
    def __init__(self):
        object1 = send_cylinder(length = 1.0, radius = 0.1)
        object2 = send_cylinder(length = 1.0, radius = 0.1)
        bodySegment = {}
        bodySegment[0] = 1  #one body
        bodySegment[1] = 2  #two body

当我试图从 main.py 调用类时,

main.py

from originalBody import BODY

for i in range (0,10):

    fileToRead = open('addBody.py')
    fileToAppend = open('originalBody.py', 'a')
    ...(add body from addBody.py to originalBody.py)...
    fileToAppend.close()
    fileToRead.close()

    parent = BODY()
    print(parent.bodySegment)

在第一次迭代中运行顺利:

{0: 1}

在第二次迭代中,在 originalBody.py 中添加 body 段后,预计结果会打印出来:

{0: 1, 1: 2}

但是,它会打印出第一次迭代的结果:

{0: 1}

我怀疑我的代码调用了尚未修改的原始版本 originalBody.py 中的函数。我是否需要在 main 中添加一些代码才能从 originalBody 的修改版本中获取类方法?还是修改 originalBody 后需要加入延时调用方法?

【问题讨论】:

  • 看来您可能想重新加载文件?您是否研究过 imp——尤其是 load_source?
  • 所以你在运行时修改了你已经加载的代码?为什么?
  • @mattsap 应该被认为是因为我想直接获取修改后的文件。我还没有研究,会尝试搜索它
  • @MisterMiyagi 我想让系统自己修改代码在每次迭代中自动添加body段
  • 不清楚为什么需要修改原始类,尤其是源代码。子类化将允许表示具有不同功能的不同类,eval 将允许可重用​​性。目前,每次运行程序时都会添加更多的身体部位...

标签: python-3.x class methods


【解决方案1】:

您可以使用 reload 内置函数重新加载已经导入的模块。

我使用 import originalBody 编辑了您的代码,因为我不确定 reload 函数如何使用 from x import y 语法。

代码如下:

from importlib import reload
import originalBody

for i in range (0,10):
    reload(originalBody)

    fileToRead = open('addBody.py')
    fileToAppend = open('originalBody.py', 'a')
    ...(add body from addBody.py to originalBody.py)...
    fileToAppend.close()
    fileToRead.close()

    parent = originalBody.BODY()
    print(parent.bodySegment)

【讨论】:

  • 非常感谢!它有助于解决我的问题。只是 reload() 适用于 python 2。就我的 python 3.3 而言,'import imp imp.reload()' 就可以了
  • 对不起,我应该指定版本。无论如何,从 python 3.4 开始就存在 reload!
猜你喜欢
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
相关资源
最近更新 更多