Ошибка импорта класса в другой файл с Python - PullRequest
0 голосов
/ 20 октября 2018

Я изучаю Python в данный момент задача заключается в следующем;Напишите программу, которая считывает информацию о питомце (имя, тип и возраст) из файла (называемого animals.txt) и создает объекты Pet (используя информацию, хранящуюся в файле animals.txt).Храните объекты Pet в списке с именем животных.

animal.txt

ralph, dog, 3
buster, cat, 8
sammy, bird, 5
mac, dog, 1
coco, cat, 6

Мой созданный файл класса называется pet.py

class Pet:
    # The __init__ method initializes the data attributes of the Profile class
    def __init__(self, name ='', animal_type = '', age = ''):
        self.__name = name
        self.__animal_type = animal_type
        self.age = 0

    def __str__(self):
        string = self.__name + ' ' + self.__animal_type + ' ' + self.age
        return string

    def set_name(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_animal_type(self, breed):
        self.__animal_type = breed

    def get_animal_type(self):
        return self.__animal_type

    def set_age(self, old):
        self.age = old    

    def get_age(self):
        return self.age

Затем я хочу использовать этот класс в файле animals.py

import pet

animals = [] // create a list 

infile = open("animals.txt", "r") // open the file

lines = infile.readlines() // read all lines into list

## add each pet object
for line in lines:
    data = line.split(",")
    animals.append(pet.set_name(data[0]))
    animals.append(pet.set_animal_type(data[1]))
    animals.append(pet.set_age(data[2]))

infile.close()

Я получаю ошибку

pet.set_name [pylint] E1101: модуль 'pet' не имеет члена 'set_name'.

Если я сделаю этот код ниже в файле класса pet.py I don 'Вы получите ошибку

pet = Pet()
name = "thing"
breed = "dog"
pet.set_name(name)
pet.set_animal_type(breed)
pet.set_age(10)
print(pet)

и она вернется, как и ожидалось

вещь собака 10

Почему не animals.py файл позволяет мне использовать класс, который я импортировал?

Я пробовал pet = Pet (), но у него

ошибка E0602: неопределенная переменная 'Pet'

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

В вашем файле animals.py pet представляет модуль.Вам нужно извлечь класс, расположенный в этом модуле, следующим образом:

import pet

myPet = pet.Pet()
0 голосов
/ 20 октября 2018

Прямо сейчас вы импортируете все содержимое модуля pet.Вы можете получить доступ к классу Pet одним из двух способов.

Первый требует использования всего точечного пути объекта

import pet

pet.Pet(...)

Второй требует импорта Pet class

from pet import Pet

Pet(...)

Здесь есть один момент, который заключается в том, что в зависимости от структуры вашей папки Python может не определить ваш файл как импортируемый, поэтому вам может потребоваться создать пустой файл с именем __init__.py вта же позиция в вашей структуре каталогов, что и pet.py.

...