Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python—如何正确地从另一个文件中的类导入方法_Python_Python 3.x - Fatal编程技术网

python—如何正确地从另一个文件中的类导入方法

python—如何正确地从另一个文件中的类导入方法,python,python-3.x,Python,Python 3.x,这里是Python新手。我在尝试从我创建的类导入和/或使用方法时遇到问题,我为该类创建了“/lib”目录 以下是我当前的文件树: /tokenmgt /lib/myToken.py 从目录: /tokenmgt 我正在这个目录下从命令行运行python。 我想使用类“TokenMgr”中定义的“create”方法: class TokenMgr(): “”“为令牌管理器建模”“” 定义初始化(自): 通过 def创建(自我、私钥、电子邮件): """""" 我发现以下

这里是Python新手。我在尝试从我创建的类导入和/或使用方法时遇到问题,我为该类创建了“/lib”目录

以下是我当前的文件树:

/tokenmgt
         /lib/myToken.py
从目录:

/tokenmgt
我正在这个目录下从命令行运行python。 我想使用类“TokenMgr”中定义的“create”方法:

class TokenMgr():
“”“为令牌管理器建模”“”
定义初始化(自):
通过
def创建(自我、私钥、电子邮件):
""""""  
我发现以下错误:

Type "help", "copyright", "credits" or "license" for more information.
>>> import lib.myToken
>>> from lib.myToken import create
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'create' from 'lib.myToken' (C:\Users\FOO\Desktop\MyWork\dev\lib\myToken.py)
键入“帮助”、“版权”、“信用证”或“许可证”以了解更多信息。
>>>导入lib.myToken
>>>从lib.myToken导入创建
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:无法从“lib.myToken”(C:\Users\FOO\Desktop\MyWork\dev\lib\myToken.py)导入名称“create”

是否还需要导入在.py脚本中定义的类名(“TokenMgr”)?我不知道如何正确地执行此操作。多亏了,只能通过对象访问create方法。因此,您应该导入类,创建实例,然后执行instance.create()..如果您觉得创建不应该绑定到任何对象,您可以使用@classmethod对其进行修饰,这样您就可以在没有对象的情况下访问

下面是一些基础知识。Pythons类可以有三种类型的例程

  • 实例方法->这些方法绑定到一个对象,它们接收self作为第一个参数,即对象
  • 类方法->对于类的所有对象都是通用的,第一个参数是这些方法的cls,而不是self
  • 静态方法->它们也绑定到一个类,但它们既不接收类实例也不接收对象实例作为第一个参数。这与在类定义之外有一个独立的函数一样好
  • 2和3分别使用@classmethod和@staticmethod装饰器实现,如下所示:

    tokenManager_obj = TokenManager()
    tokenManager_obj.create()
    
    在[6]:B.创建(10) 在静态创建方法中

    In [7]: class A:
       ...:     @classmethod
       ...:     def create(cls,x):
       ...:         print("In create method with args {},{}".format(cls, x))
       ...:
       ...:
    
    In [8]: A.create(10)
    In create method with args <class '__main__.A'>,10
    
    
    In [4]: class B:
       ...:     @staticmethod
       ...:     def create(x):
       ...:         print("In static create method..")
       ...:
    
    In [6]: B.create(10)
    In static create method..
    

    create方法只能通过对象访问。因此,您应该导入类,创建实例,然后执行instance.create()…如果您觉得create不应该绑定到任何对象,您可以使用@classmethod对其进行修饰,这样您就可以在没有对象的情况下访问

    下面是一些基础知识。Pythons类可以有三种类型的例程

  • 实例方法->这些方法绑定到一个对象,它们接收self作为第一个参数,即对象
  • 类方法->对于类的所有对象都是通用的,第一个参数是这些方法的cls,而不是self
  • 静态方法->它们也绑定到一个类,但它们既不接收类实例也不接收对象实例作为第一个参数。这与在类定义之外有一个独立的函数一样好
  • 2和3分别使用@classmethod和@staticmethod装饰器实现,如下所示:

    tokenManager_obj = TokenManager()
    tokenManager_obj.create()
    
    在[6]:B.创建(10) 在静态创建方法中

    In [7]: class A:
       ...:     @classmethod
       ...:     def create(cls,x):
       ...:         print("In create method with args {},{}".format(cls, x))
       ...:
       ...:
    
    In [8]: A.create(10)
    In create method with args <class '__main__.A'>,10
    
    
    In [4]: class B:
       ...:     @staticmethod
       ...:     def create(x):
       ...:         print("In static create method..")
       ...:
    
    In [6]: B.create(10)
    In static create method..
    

    这是导入和使用类的正确方法:

    from lib.MyToken import TokenMgr
    manager = TokenMgr()
    manager.create(private_key,'foo@gmail.com')
    

    注意第二行,我们在其中创建了类的实例。

    这是导入和使用类的正确方法:

    from lib.MyToken import TokenMgr
    manager = TokenMgr()
    manager.create(private_key,'foo@gmail.com')
    

    请注意第二行,我们在其中创建了该类的实例。

    可能类似于:
    导入myToken.TokenMgr
    已授予要使用此方法的另一个文件位于同一目录级别。@FishingCode-thx.I稍远一些。但当我使用该类时,它会显示NameError:未定义名称“create”我这样称呼它-my_token=create(private_key,'foo@gmail.com“)啊,好的。我认为它必须类似于
    import myToken.TokenMgr as tokenMethod
    tokenMethod可以是您想要的任何东西,然后调用
    create
    如下所示:
    tokenMethod.create()
    @FishingCode您实际上需要在此处实例化该类。可能类似于:
    导入myToken.TokenMgr
    已授予您要使用此方法的另一个文件在同一目录级别内。@FishingCode-thx。我稍微深入了一点。但当我使用该类时,它会显示NameError:name'create'未定义像这样称呼它-my_token=create(private_key,'foo@gmail.com“)啊,好的。我认为它必须类似于
    import myToken.TokenMgr as tokenMethod
    tokenMethod可以是您想要的任何东西,然后调用
    create
    如下所示:
    tokenMethod.create()
    @FishingCode您实际上需要在此处实例化该类。这是完全正确的,但特别是由于OP是一名新手,您需要提供更多关于他们如何实际执行此操作的详细信息。@alaniwi-谢谢。是的,我正在尝试学习如何正确导入和使用类。因此,任何简单的示例都将不胜感激。谢谢大家都是正确的,但特别是OP是一个新手,你需要提供更多关于他们将如何实际做到这一点的细节。@alaniwi-谢谢。是的,我正在努力学习如何正确导入和使用类。因此任何简单的例子都将不胜感激。谢谢大家谢谢@bensha-你的回复和回答解决了我立即需要获得的问题谢谢@bensha-你的回复和回答解决了我立即需要让它工作的问题!