Как мне создать экземпляр класса в Python? - PullRequest
0 голосов
/ 27 октября 2019

Я новичок в Python и занимаюсь практикой для Uni,

Я знаком с Java, поэтому я пытаюсь создать класс в Python, а затем создать экземпляр класса, который будет использоваться какобъект из другого файла в том же каталоге.

, вот как я пытаюсь это сделать:

в main.py -

import player
p1 = player.Player(300, 300, 64, 64)

вот мой Playerкласс, расположенный в player.py

import main
class Player:
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 15
        self.left = False
        self.right = False
        self.walkCount = 0

, это приводит к:

AttributeError: модуль 'player' не имеет атрибута 'Player'

После некоторых исследований я также попытался:

from player import Player
p1 = Player(300, 300, 64, 64)

, что приводит к: ImportError: не может импортировать имя 'Player' из 'player' (C: \ Users \ Alex \ PycharmProjects \ BunkerGame \ player.py)

довольно простои игнорируя некоторый другой код, это должно создать экземпляр класса Player в player.py для использования в файле main.py

Ответы [ 5 ]

2 голосов
/ 27 октября 2019

Как вы отметили в комментарии, вы импортируете main в player - это означает, что у вас есть циклический импорт: Python не может решить эту проблему, поэтому возникает ошибка атрибута.

Вам не нужно это делать,В основном не должно быть ничего, что нужно игроку. Если есть, перенесите его на самого игрока или третий модуль.

1 голос
/ 27 октября 2019

Как отметил @Daniel Roseman, у меня в файле player.py был файл import main, который явно не нравится python, удаление этого и любого связанного с ним кода решило проблему!

1 голос
/ 27 октября 2019

Из ошибки, которую вы упомянули, вы, скорее всего, уже установили модуль с именем player, который Python импортирует в отличие от вашего локального файла player.py. Попробуйте переименовать файл player.py во что-то другое, или перейдите на консоль и выполните pip uninstall player.

Обратите внимание, что в сообщении об ошибке указано cannot import name 'Player' from 'player', что означает, что Python обращается к модулю с именем player, но не может получить доступ к классу Player.

0 голосов
/ 27 октября 2019

Вам необходимо удалить player.. Вы передаете класс в качестве атрибута, используя ., что является причиной первой ошибки, а вторая заключается в том, что вы импортируете main на свою страницу игрока и импортируете player на свойГлавная страница. Просто избавьтесь от import main на странице вашего игрока.

Первая ошибка:

import player

p1 = player.Player(300, 300, 64, 64)

Это должно быть просто:

import player

p1 = Player(300, 300, 64, 64)

Вот примерчто произошло:

class Player:
    def __init__(self, name, age):
        self.name = name
        self.age = age

player = Player # setting the class to variable

player.name = 'Johnny' # .name is the attribute of the Player class
print(player.name)

Вывод:

'Johnny'

Вы сделали это:

player.Player.name = 'Johnny'
print(player.name)

, которая возвращает вашу ошибку:

Traceback (most recent call last):  File "main.py", 
line 8, in <module>          
player.Player.name = 'Johnny'AttributeError: type object 'Player' has no attribute 'Player'
0 голосов
/ 27 октября 2019

Вы просто должны написать импорт так:

import Player

p1 = Player(300, 300, 64, 64)

Вы также можете написать что-то вроде:

import Player as p

p1 = p(300, 300, 64, 64)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...