Python - 导入 class 模块时出现 NameError

Python - NameError when import class module

当我 运行 我的脚本时出现以下错误:
NameError: 名称 'curr_period_2' 未定义

我没怎么用过类,这是我第一次把它们放在一个单独的模块中。

我想做的只是用 change_object 函数更改一个对象属性。

不要考虑代码的作用,因为这只是一个小测试。

非常感谢任何帮助。

MyClass.py

class MyPeriod:

def __init__(self, year, month):
    self._year = year
    self._month = month

@property
def year(self):
    return self._year


@year.setter
def year(self, year):
    self._year = year

MyMain.py

    from MyClass import MyPeriod

    def main():
        curr_period = MyPeriod(2028, 1)
        print(f'Object 1 is {curr_period.year}-{curr_period._month}')
        curr_period.year = curr_period.year + 1
        print(f'Object 1 +1  is {curr_period.year}-{curr_period._month}')

    def init_object():
        curr_period_2 = MyPeriod(2038, 1)
        print((f'Object 2 is {curr_period_2.year}-{curr_period_2._month}'))

    def change_object():
        curr_period_2.year = curr_period_2.year * 2
        print(f'Object " * 2' is {curr_period_2.year}-{curr_period_2._month})

    init_object()
    change_object()

    if __name__ == "__main__":
        main()

curr_period_2change_object 中不存在,因为它是 init_object 函数的局部变量。您可以尝试将其作为参数传递给 change_object 函数:

def init_object():
    curr_period_2 = MyPeriod(2038, 1)
    print((f'Object 2 is {curr_period_2.year}-{curr_period_2._month}'))
    return curr_period_2

def change_object(current_period_2):
    curr_period_2.year = curr_period_2.year * 2
    print(f'Object " * 2' is {curr_period_2.year}-{curr_period_2._month})

然后:

period = init_object()
change_object(current_period_2=period)

或尝试使用 global 变量

main()、init_object() 和 change_object() 是 "alone/local/independent" 函数,所以里面的变量只是局部的(不是全局的)。

我认为解决此问题的最佳方法是在这些函数内将这些内部变量声明为全局变量。

见:

from MyClass import MyPeriod

def main():
    # first of all declare curr_period as global
    global curr_period

    curr_period = MyPeriod(2028, 1)
    print(f'Object 1 is {curr_period.year}-{curr_period._month}')
    curr_period.year = curr_period.year + 1
    print(f'Object 1 +1  is {curr_period.year}-{curr_period._month}')

def init_object():
    #same here "Global" declaration
    global curr_period_2

    curr_period_2 = MyPeriod(2038, 1)
    print((f'Object 2 is {curr_period_2.year}-{curr_period_2._month}'))

def change_object():
    curr_period_2.year = curr_period_2.year * 2
    print(f'Object " * 2' is {curr_period_2.year}-{curr_period_2._month})

init_object()
change_object()

if __name__ == "__main__":
    main()