将__init__值从较高的类传递到需要相同参数的子类

时间:2015-12-16 15:56:37

标签: python class

我正在创建一个创建塔的小游戏。

塔架有两个部件,底座和喷枪。为了做到这一点,我试图将self.x的值传递给子类的__init__函数。一旦我找到解决方案,我将进一步添加update()功能。

这是我的代码。 (格式不正确,不完整......抱歉!)

import pygame
from math import atan2
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Foongus v0.1')
pygame.init()

class home_base:
    def __init__(self, x, y):
        class base:
            def __init__(self, x, y):
                self.image = pygame.image.load('base.png')
                screen.blit(self.image, (x, y))
        class gun:
            def __init__(self, x, y):
                self.image = pygame.image.load('gun.png')
                screen.blit(self.image, (x, y))

home = home_base(300, 300)
while True:
    screen.fill((0,0,0))
    pygame.display.update()

2 个答案:

答案 0 :(得分:0)

你通常不会在另一个类的__init__方法中定义一个类。相反,我会沿着这些方向做点什么:

class A(object):

    def __init__(self, instance_classB):
        # here self is an instance of A and instance_classB an instance of B
        pass

class B(object):

    def __init__(self):
        # self is the newly created instance of B
        self._instance_classA = A(self)

# create an instance of B - calls B.__init__ on the new instance
b = B()

通过这种方式,您可以在B中引用类A的实例,其中类self._instance_classA的每个实例都有一个向后引用到类A的实例,它属于传递给构造函数。

答案 1 :(得分:0)

以下代码可以帮助您指导您应该前进的方向:

import math
import pygame


def main():
    screen = pygame.display.set_mode((800, 800))
    pygame.display.set_caption('Foondus v0.1')
    pygame.init()
    home = HomeBase(300, 300, screen)
    while True:
        screen.fill((0, 0, 0))
        pygame.display.update()


class HomeBase:

    def __init__(self, x, y, screen):
        self.x, self.y, self.screen = x, y, screen
        self.base_image = pygame.image.load('base.png')
        self.gun_image = pygame.image.load('gun.png')
        self.screen.blit(self.base_image, (self.x, self.y))
        self.screen.blit(self.gun_image, (self.x, self.y))

if __name__ == '__main__':
    main()