Неясно, что делает ваша программа, но вы получаете сообщение об ошибке потому, что вы создаете экземпляр cow = Cow(x, y)
в блоке if
, но вызываете cow.cow_draw(screen)
, который является методом этого экземпляра. вне оператора if перед запуском блока if
. Таким образом, вы пытаетесь вызвать метод без создания экземпляра. Чтобы решить эту проблему, вы можете просто переместить cow.cow_draw(screen)
внутрь блока if. Я хочу отметить кое-что, поскольку вы создаете другой экземпляр Cow
, было бы разумнее использовать другое имя, отличное от первого, возможно, cow1
?
if cow.x < 0:
y = random.randint(0, 600)
x = random.randint(0, 960)
cow1 = Cow(x, y)
screen.fill((255, 255, 255))
cow1.cow_draw(screen)
Это избавит от ошибки. Кроме того, я заметил еще пару вещей. Во-первых, все import
, как обычно определяется вверху. Во-вторых, вы дважды звоните pygame.image.load(r'C:\Users\y\Pictures\cow5.jpg')
. Вместо этого вы можете просто определить его один раз и использовать несколько раз. Итак, ваш класс может выглядеть так:
class Cow(object):
def __init__(self, img, x=0, y=0):
dist = 0
self.image = img
self.x = x
self.y = y
self.dist = dist
И при создании экземпляра вы можете передать переменную изображения в качестве первого аргумента.
cow = Cow(cow_image, 10, 10)