如何导入模块和使用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()
时调用的方法。
它期望被赋予两个输入参数 num
和 limit
,但您调用它时没有任何参数。
如果您检查控制台的输出,您还会看到:
TypeError: __init__() missing 2 required positional arguments: 'num' and 'limit'
您的模块导入有效,但您的 __init__()
需要 2 个参数 num
和 limit
,您没有在 >>> 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
我正尝试在 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()
时调用的方法。
它期望被赋予两个输入参数 num
和 limit
,但您调用它时没有任何参数。
如果您检查控制台的输出,您还会看到:
TypeError: __init__() missing 2 required positional arguments: 'num' and 'limit'
您的模块导入有效,但您的 __init__()
需要 2 个参数 num
和 limit
,您没有在 >>> 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