Можно ли подключить атрибуты из одного класса для использования в другом в python?

#python #class #subclass

#python #класс #подкласс

Вопрос:

Я новичок в python и занимаюсь программированием уже месяц. Я решил создать простой игровой проект (в pygame), в котором игрок (круг) будет двигаться в направлении курсора мыши, используя векторы.

 import pygame
import random
import pyautogui 
#Add Mouse class and use pyautogui.position() to return mouse position later on

pygame.init()

screen_width, screen_height = 500, 500
screen = pygame.display.set_mode((screen_width, screen_height))

class Player:
    def __init__(self, x, y, circle_color, circle_radius, circle_outline_width):
        self.circle_color = circle_color
        self.coordinates = (x, y)
        self.circle_radius = circle_radius
        self.circle_outline_widht = circle_outline_width

    def draw(self, window):
        pygame.draw.circle(window, self.circle_color, self.coordinates, self.circle_radius)
 

Мой класс игрока с основными атрибутами, необходимыми для создания игрока ^^^^

 class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def get_circle_position(self):
        event = pygame.event.poll()
        if event.type == pygame.MOUSEMOTION:
            circle_position = f"Circle at X: {self.x}, Y:{self.y}"
            return circle_position
 

Мой класс точек, который должен считывать положение круга в любой данный момент. Проблема в том (я знаю, что этот код неправильный), Я хочу использовать self.x и self.y из класса Player, которые являются координатами игрока с момента появления, и я не хочу снова повторять весь код. Я не знаю, возможно ли это? И как?

Остальная часть кода с def main()

 def constantly_display(window, player):
    window.fill(pygame.Color("white"))
    player.draw(window)
    pygame.display.update()

def main():
    run = True
    p = Player(random.randint(35, screen_width - 40), random.randint(35, screen_height - 40),
               pygame.Color((random.randint(0, 200)),
                            (random.randint(0, 200)),
                            (random.randint(0, 200))), 40, 5)
    c = Point(p, p)
    p.getposition = c
    while run:
        p.getposition.get_circle_position()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                pygame.quit()
        constantly_display(screen, p)
main()
 

Другая проблема заключается в том, как подключить все это к def main() ? (Улучшения кода / синтаксиса приветствуются)
Спасибо!

Комментарии:

1. Мне не очень понятно, почему у вас здесь два класса. Можете ли вы уточнить, что именно определяет, какой бит кода используется в одном по сравнению с другим? Возможно, вы хотите self.coordinates = Point(x, y) войти Player.__init__ , но было бы гораздо разумнее вставить код поиска мыши Player , а не Point (я бы ожидал, что это будет больше связано с векторной математикой).

2. @Blckknight Я хотел сделать игру организованной по классам, просто для простой практики и возможности добавления все большего количества игроков позже, чтобы увидеть, как это будет иметь значение, конечной конечной целью было бы сделать ее многопользовательской, вот почему я подумал, что мне нужны классы, чтобы у каждого игрока были свои собственныеатрибуты, отслеживание кругов и отслеживание мыши. Я хочу каким-то образом наследовать self.x и self. y, которые являются круговыми шнурами в классе Player и используют его в классе Point, и основная функция для отслеживания круга / игрока. То же самое относится и к классу мыши, тогда я бы добавил точечные шнуры к шнурам мыши для движений игрока.

3. Занятия — это хорошо, но вам нужно научиться правильно их комбинировать. Вы на самом деле не объяснили, почему ваш Point класс должен существовать отдельно от Player класса, или что означает «отслеживание круга» в этом контексте. Есть много способов получить доступ к x и y координатам одного класса из какого-то другого класса, не очевидно, что лучше для вас. Вероятно, вам нужны какие-то «композиционные» отношения, когда один из ваших классов имеет ссылку на экземпляр другого, но без понимания того, что означают классы, на самом деле не очевидно, что было бы лучше.