создать / вызвать экземпляр класса, объект ошибки не определен - PullRequest
0 голосов
/ 29 августа 2018

Я не создавал никаких классов с нуля раньше. Любые предыдущие были очень просты. Я близок к созданию класса правильно? Я запутался в том, как вызвать экземпляр класса. Я хочу создать class Book и назначить различные значения (имя автора, домашний каталог, выходной каталог, функция для получения заголовка, функция для получения файлов .html из домашнего каталога и т. Д.). Я хочу создать новый экземпляр class Book для каждого bookList[i]. bookList[i] - это homeDir каждой книги. Что пропущено в моем классе и / или вызове экземпляра Заранее благодарим за помощь и указатели.

class Book(obj):        
    def __init__(self, inc_dir):
        self.home_dir = inc_dir
        # self.author_name = aName
        # self.target_dir = target_dir

# main #
bookList = getDirs(homeDir) # returns a list. works.
# print("len(bookList): ", len(bookList))     
i = 0    
while i <= len(bookList):
    curBook = Book(bookList[i])
    print("curBook name: " + curBook.home_dir)
    print("Book Path: " + bookList[i])
    i += 1  

Traceback (most recent call last):
    File "D:\Scripts\Python\batch content editing\html_book_builder.py", line 65, in <module>
        class Book(obj):
    NameError: name 'obj' is not defined

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Вы определяете класс Book для наследования от класса obj, и, тем не менее, такого класса с именем obj нет, поэтому ошибка. Если вы хотите, чтобы класс Book наследовал от базового класса, вы должны либо заставить его наследовать от класса object:

class Book(object):

или просто не указывайте родительский класс, если вы используете Python 3.x:

class Book:
0 голосов
/ 29 августа 2018

Я думаю, что это с obj, который передается в качестве аргумента для Книги Классов. Это должно быть object (нижний регистр) в Python 2.x. В Python 3.x вы можете просто не указывать!

0 голосов
/ 29 августа 2018

Что происходит, когда вы пишете class Book(obj), интерпретатор Python ищет что-то с именем obj. Вы еще не определили obj, поэтому Python жалуется, что ничего с именем obj не было определено.

Вы могли видеть примеры с object следующим образом:

class Book(object):

В этих примерах подкласс уже существует object. Там нет ошибки имени, потому что эта вещь уже определена. В Python 3 вы можете полностью избавиться от object. Вы можете сделать это и в Python 2, но поведение классов в этом случае немного меняется (было довольно много так называемых «разрывных» изменений между 2 и 3).

class Book:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...