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

时间:2015-04-30 14:19:39

标签: python python-import

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

这是我的代码:

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>
>>> 

4 个答案:

答案 0 :(得分:2)

您的模块导入有效,但您的__init__()预计会在num行传递limit>>> numb = eight.mynum()两个参数。

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

答案 1 :(得分:1)

def __init__(self, num, limit)

这是您致电eight.mynum()时调用的方法。 它希望给出两个输入参数numlimit,但是你可以在没有任何参数的情况下调用它。

如果你检查控制台的输出,你也会看到:

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

答案 2 :(得分:1)

导入类时,需要创建一个类实例。

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

答案 3 :(得分:0)

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

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

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

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

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

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

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