【问题标题】:How to import class with all functions in Python from different file?如何从不同的文件中导入具有 Python 中所有函数的类?
【发布时间】:2020-08-22 15:34:12
【问题描述】:

我在文件“V.py”中创建了“类 V”,其中包含一些我想在其他项目中继续使用的函数,但是当我调用这些函数中的任何一个时,我会收到一个错误,即名称未定义。我尝试了所有我能找到的解决方案,但没有任何解决方案。希望有人知道我做错了什么..

class V(object):

    def magnitude(self):
        a=0
        for i in range(len(self)):
            for j in range(len(self[i])):
                a= a + self[i][j] **2
        return sqrt(a)

调用函数:

from V import V
A = np.array([[1,2,3],[4,0,6],[7,8,9]])
print magnitude(A)

错误:

NameError: name 'magnitude' is not defined

【问题讨论】:

标签: python python-2.7


【解决方案1】:

重构您的类方法以获取参数,并在访问该方法之前创建类的对象。

from math import sqrt


class V(object):

    def magnitude(self, A):
        a = 0
        for i in range(len(A)):
            for j in range(len(A[i])):
                a = a + A[i][j] ** 2
        return sqrt(a)
import numpy as np
from V import V

v = V()
A = np.array([[1,2,3],[4,0,6],[7,8,9]])
print (v.magnitude(A))

这会奏效。 原因是您试图在不创建类对象并在方法内部传递参数的情况下访问类方法。 self 基本上是调用方法的对象。

【讨论】:

  • 感谢您的回复!我运行了代码,它给了我一些奇怪的错误“TypeError:magnitude() 恰好需要 1 个参数(给定 2 个)”。但是,如果我在原始文件中运行它,它可以正常工作。
  • 你换班了吗?我已经测试过这段代码不应该破坏
【解决方案2】:

你应该将大小传递给类,而不是方法 试试:

from V import V
A = np.array([[1,2,3],[4,0,6],[7,8,9]])
m = V(A)
print (V)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2019-12-30
    • 2016-08-10
    • 2015-06-20
    相关资源
    最近更新 更多