我一直试图弄清楚为什么从不同文件的类导入方法对我不起作用。
我制作了一个简化版本,最后我想打印从 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/