小编mat*_*hak的帖子

在父类中调用重写的父类方法

我正在尝试覆盖两个父类函数trainevalChildClass. 在父类中,eval()基本上调用train(). 但是,我知道,当我写我的代码如下,eval()父类试图调用该函数train()ChildClass-我想eval()在父类调用train()父类代替。

我只是想知道是否有任何干净的解决方案来进行更改以ChildClass允许父类调用父train()函数?

class ChildClass(nn.Module):
    def __init__(self):
        super(ChildClass, self).__init__()

    def train(self):
        super(ChildClass, self).train()

    def eval(self):
        super(ChildClass, self).eval()
Run Code Online (Sandbox Code Playgroud)

父类位于 Python 包 ( pytorch) 中,因此不应进行任何更改:

class Module(object):
    #...

    def train(self, mode=True):
        # ...
        return self

    def eval(self):
        return self.train(False)
Run Code Online (Sandbox Code Playgroud)

python python-3.x pytorch

5
推荐指数
1
解决办法
309
查看次数

无论终端窗口大小如何,如何让 tqdm 打印到同一行?

我正在使用 tqdm 绘制进度条,并且希望 tqdm 覆盖终端中的同一行,无论窗口大小如何。考虑以下代码:

from tqdm import trange
from time import sleep
t = trange(100, desc='Bar desc', leave=True)
for i in t:
    t.set_description("Bar desc (file %i)" % i)
    t.refresh() # to show immediately the update
    sleep(0.01)
Run Code Online (Sandbox Code Playgroud)

当我的终端窗口的宽度比 宽时"Bar desc (file %i)",tqdm 将根据我的需要打印进度条。但是,如果我减小终端窗口的宽度,tqdm 将打印为两行。每个 tqdm 更新都会打印到新行。即使我调整终端大小,有什么方法可以让 tqdm 打印到相同的两行吗?

我在 Ubuntu 中使用 bash 终端。

python bash tqdm

5
推荐指数
1
解决办法
1540
查看次数

Python 3:导入同名的不同Python模块

我有几个相互独立编写的 python 项目(例如 a、b)。我想创建第三个项目(c),它使用这两个项目的例程,而不会对(a,b)的主要内容进行太多更改。

只要 (a.py, b.py) 在各自的项目文件夹中调用时仍然有效,对 (a, b) 内的导入语句进行细微更改就可以了。

该问题与上一篇文章(重新导入具有相同名称的不同 python 模块)有点相似,但是:

  1. 我使用的是 Python 3,因此相对导入的工作方式似乎有所不同。

  2. 我想知道如何替换“from utils import *”行,如下例所示。

  3. 我在当前工作目录下有另一个 utils.py,遮蔽了项目 a 和 b 中的其他 utils.py。


比如我的项目如下:

  • A
    • a.py
    • 实用程序.py
    • b.py
    • 实用程序.py
  • C
    • 主要.py
    • 实用程序.py

a/a.py 的内容:

import utils
utils.hello()
Run Code Online (Sandbox Code Playgroud)

a/utils.py 的内容:

def hello():
    print('hello from a')
Run Code Online (Sandbox Code Playgroud)

b/b.py 的内容:

from utils import *
hello()
Run Code Online (Sandbox Code Playgroud)

b/utils.py 的内容:

def hello():
print('hello from b')
Run Code Online (Sandbox Code Playgroud)

main.py 的内容

import sys
sys.path.append('../a')
import a
sys.path.append('../b')
import b
import utils

utils.hello()
Run Code Online (Sandbox Code Playgroud)

该示例打印(我希望三行分别打印 a、b、c): …

python python-3.x

5
推荐指数
2
解决办法
3660
查看次数

标签 统计

python ×3

python-3.x ×2

bash ×1

pytorch ×1

tqdm ×1