python - 为什么从不同文件的类导入方法对我不起作用?

标签 python python-3.x class inheritance methods

我一直试图弄清楚为什么从不同文件的类导入方法对我不起作用。

我制作了一个简化版本,最后我想打印从 0 到 9 的数字,中间有 1 秒的延迟。相反,什么也没有发生。我有三个文件:print.py、generate.py 和 main.py(我正在运行的主代码)。 generate.py 调用 print.py 中的类的方法,main.py 调用generate.py 中的类的方法

在 print.py 中,我有

import time
class printer(object):
    def __init__(self):
        pass
    def printStuff(n):
        print(n)

在generate.py中,我有

from print import printer
class generator(printer):
    def __init__(self):
        pass
    binaryNumbers =[
        int('11111100', 2),
        int('01100000', 2),
        int('11011010', 2),
        int('11110010', 2),
        int('01100110', 2),
        int('10110110', 2),
        int('10111110', 2),
        int('11100000', 2),
        int('11111110', 2),
        int('11110110', 2) ]
    def displayNum(n):
        number=binaryNumbers[n]
        printer.printStuff(number)

在main.py中,我有

import time
from generate import generator
def countUp():
    for n in range(10):
        generator.displayNum(n)
        time.sleep(1)
try:
    while 1:
        countUp()

有人看到我遗漏的语法错误吗?谢谢。

我正在使用 repl 来运行代码。我没有收到任何错误消息。相反,什么也没有发生,它等待我运行另一段代码。我还尝试添加 except Keyboard Interrupt: 并完全摆脱“try- except”,但我仍然无法让它工作。

最佳答案

你应该回顾你的目标。如果你想使用OOP,你必须获取一个对象而不是使用类方法。
你的主要代码应该是这样的:

import time
import logging

from generate import generator


def countUp():
    for n in range(10):
        g = generator()
        g.displayNum(n)
        time.sleep(1)


if __name__ == '__main__':
    try:
        while 1:
            countUp()
    except Exception as e:
        logging.exception(e)

print.py 像这样:

import time


class printer(object):
    def __init__(self):
        pass
    # I thought you want to add a instance method, so I add `self`
    def printStuff(self, n):
        print(n)

和generate.py像这样:

from print import printer


class generator(printer):
    def __init__(self):
        pass
    binaryNumbers = [
        int('11111100', 2),
        int('01100000', 2),
        int('11011010', 2),
        int('11110010', 2),
        int('01100110', 2),
        int('10110110', 2),
        int('10111110', 2),
        int('11100000', 2),
        int('11111110', 2),
        int('11110110', 2)]

    # I thought you want to add a instance method, so I add `self`
    def displayNum(self, n):
        number = self.binaryNumbers[n]
        p = printer()
        p.printStuff(number)

虽然您可以运行此代码,但我建议将 print.py 重命名为另一个名称,因为它可能会导致更多您无法想象的错误。

关于python - 为什么从不同文件的类导入方法对我不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799287/

相关文章:

Python - 一个单词中有多个字母的绞刑吏游戏

python - 如何通过使用 pandas 进行转换来不删除而是处理异常值?

python - 无法使用 writerrows 在 csv 文件中写入列表

python - 在pycharm中安装包 "cufflinks"时出现错误

javascript - 我如何通过 jQuery 访问 td 类?

python - 将开发 django 应用程序导出到生产环境

python - Numba 元组切片问题 - 整数除外

python - 使用模拟对象简化 Django 测试设置

python 3。当我在 __init__ 方法中深度复制具有 cv2.VideoCapture 的类的实例时出现错误

c++ - 当我声明类型时,为什么我的函数未定义?