如何导入模块和使用python中的方法

How to import module and use the methods in python

我正尝试在 python 中学习 oops,并且我创建了一个 class 对象。我正在尝试导入模块并使用我在其中定义的方法。我正在从《实用编程》一书中学习。我尝试过各种各样的事情,但没有成功。任何帮助将不胜感激。 提前致谢。

这是我的代码:

class mynum:
    def __init__(self, num, limit):
        self.num = num 
        self.limit = limit

    def numf(self):
        num =  int(input("enter a number"))
        limit = int(input('enter the limit'))
        total = 0
        while (num < limit):
            num = num + 9
            if num >= limit:
                break
            else:
                total = total + num
                print(num)
        print("total=",total)

最后一个,我在尝试时遇到的错误:

Python 3.4.0 (default, Apr 11 2014, 13:05:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 
>>> import eight
>>> 
>>> numb = eight.mynum()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() missing 2 required positional arguments: 'num' and 'limit'
>>> numb = eight.mynum(3,40)
>>> numb
<eight.mynum object at 0xb710412c>
>>> 

def __init__(self, num, limit)

这是调用 eight.mynum() 时调用的方法。 它期望被赋予两个输入参数 numlimit,但您调用它时没有任何参数。

如果您检查控制台的输出,您还会看到:

TypeError: __init__() missing 2 required positional arguments: 'num' and 'limit'

您的模块导入有效,但您的 __init__() 需要 2 个参数 numlimit,您没有在 >>> numb = eight.mynum() 行上传递。

当您将它们传递到此处时 >>> numb = eight.mynum(3,40) 您将获得一个 mynum 类型的对象。所以一切都很好

当您导入 class 时,您需要创建一个 class 实例。

from eight import mynum
object = mynum()
object.numf(3,40)

听起来您正在寻找的是让交互式 Python 响应您的对象的表示。这是通过提供一个 __repr__ 方法来完成的,该方法告诉 Python 如何表示您的对象。例如,我将以下内容添加到您的 class 定义中:

def __repr__(self):
    return 'mynum({0},{1})'.format(self.num, self.limit)

现在当我 运行 我得到相同的代码时:

>>> numb = eight.mynum(3,40)
>>> numb
mynum(3,40)

您遇到的最初问题是创建 mynum 对象。由于您没有 num 和 limit 的默认值,因此您必须在创建对象时为它们提供值,您已经知道了。

您为 class 提供的一种方法没有意义。它不使用 class 的属性。相反,它会读入新值。只有对对象本身的属性进行操作才有意义。 return 一个值而不是打印总数也是有意义的。这是一个更有意义的例子:

def numf(self):
    num = self.num
    total = 0
    while (num < self.limit):
        num = num + 9
        if num >= self.limit:
            break
        else:
            total = total + num
    return total

这导致:

>>> m = mynum(3,40)
>>> print(m.numf())
102