首页 > 解决方案 > 将变量传递给不同的类

问题描述

我有一个有两个功能的类。我正在尝试传递user_inputCreateDirectory.createDir(),但我收到此错误NameError: name 'genDir' is not defined。如何将user_input 变量传递给CreateDirectory.createDir()

我的代码如下:

class CreateDirectory():

    def genDir(name,x=0):
        while True:
            dir_name = (name + (' ' + str(x) if x is not 0 else '')).strip()
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)
                return dir_name
            else:
                x = x + 1

    def createDir(dir):
        genDir(dir)

class PyShell(Cmd):
    global default_shell_prompt
    default_shell_prompt = ("Shell > ")
    prompt = (default_shell_prompt)

    def do_exit(self,inp):
        PyShellFunc.clearScr()
        sys.exit(0)

    def do_mkdir(self,inp):
        prompt = (default_shell_prompt + "mkdir > ")
        running = True
        while running:
            global user_input
            user_input = input(prompt)

            if user_input == ("exit"):
                running = False
                prompt = (default_shell_prompt)
            else:
                try:
                    os.mkdir(user_input)
                except:
                    CreateDirectory().createDir()

标签: python

解决方案


您在这里有三个选择:1)将此函数定义为对象的方法 2)将它们定义为类的方法 3)作为静态方法

1) 作为对象的方法

class CreateDirectory():

    def genDir(self, name,x=0):
        while True:
            dir_name = (name + (' ' + str(x) if x is not 0 else '')).strip()
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)
                return dir_name
            else:
                x = x + 1

    def createDir(self, dir):
        self.genDir(dir)

2)作为类的方法

class CreateDirectory():

    @classmethod
    def genDir(cls, name,x=0):
        while True:
            dir_name = (name + (' ' + str(x) if x is not 0 else '')).strip()
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)
                return dir_name
            else:
                x = x + 1

    @classmethod
    def createDir(cls, dir):
        cls.genDir(dir)

3) 静态方法

class CreateDirectory():

    @staticmethod
    def genDir(name,x=0):
        while True:
            dir_name = (name + (' ' + str(x) if x is not 0 else '')).strip()
            if not os.path.exists(dir_name):
                os.mkdir(dir_name)
                return dir_name
            else:
                x = x + 1

    @cstaticmethod
    def createDir(dir):
        CreateDirectory.genDir(dir)

推荐阅读