2015-04-30 2 views
0

Я пытаюсь изучить oops в python, и я создал объект класса. Я пытаюсь импортировать модуль и использовать методы, которые я определил в нем. Я изучаю книгу «Практическое программирование». Я пробовал разные вещи, но не добился успеха. Любая помощь должна быть оценена. Спасибо заранее.Как импортировать модуль и использовать методы в python

Это мой код:

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

Как это отличается от ваших ожиданий? – syntonym

+0

Простите мое невежество, но я хочу использовать функцию numf(), чтобы я мог ввести два числа и получить там результат. Я знаю, что сделал ошибку, но не знаю, где. – sunp

ответ

1

При импорте класса вам нужно создать экземпляр класса.

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

Это не сработает. 'mynum()' будет терпеть неудачу без аргументов. Тогда 'numf (3,40)' будет терпеть неудачу, потому что он не ожидает аргументов. –

+0

@BradBudlong Я знаю, я удалил позиционные аргументы из __init__, а также numf func не нуждается в нем, поэтому он работает именно так. – sunp

1

def __init__(self, num, limit)

Это метод, который вызывается при вызове eight.mynum(). Он ожидает получить два входных параметра num и limit, но вы называете это без каких-либо параметров.

Если изучить вывод консоли вы также увидите:

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

2

Ваш ввозные модуль работает, но ваш __init__() ожидает 2 Params num и limit, которые вы не передаете на >>> numb = eight.mynum() линия.

Когда вы передаете их здесь >>> numb = eight.mynum(3,40), вы получаете объект своего типа mynum. Итак, все хорошо

+0

Я попробовал, но его отображающий адрес памяти. И я хочу вывод чисел, которые я передаю функции.>> import eight >>> a = eight.mynum (3,40) >>> a <8.mynum объект в 0xb715436c> >>> – sunp

+1

Ну 'numb' является экземпляром вашего объекта' mynum' , Для доступа к номерам используйте либо 'numb.num', либо' numb.limit' соответственно – mirosval

0

Похоже на то, что вы ищете, чтобы интерактивный Python ответил на представление вашего объекта. Это делается путем предоставления метода __repr__, который сообщает Python, как представлять ваш объект. Например, я добавил следующие строки в определение класса:

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

Теперь, когда я запускаю тот же код, я получаю:

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

Первоначальный вопрос, который у вас был с созданием вашего объекта тупит. Поскольку у вас нет значений по умолчанию для 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 
Смежные вопросы