Python 将一个uuu init_uuuu值从一个更高的类传递到一个需要相同参数的子类中

Python 将一个uuu init_uuuu值从一个更高的类传递到一个需要相同参数的子类中,python,class,Python,Class,我正在创建一个创建塔的小游戏 塔有两个部件,底座和枪。为此,我尝试将self.x的值传递到子类的\uuuu init\uuuu函数中。一旦有了解决方案,我将进一步添加一个update()函数 这是我的密码。(格式错误且不完整…抱歉!) 通常不会在另一个类的\uuuu init\uuu方法中定义类。相反,我会按照以下思路做一些事情: class A(object): def __init__(self, instance_classB): # here self is a

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

塔有两个部件,底座和枪。为此,我尝试将
self.x
的值传递到子类的
\uuuu init\uuuu
函数中。一旦有了解决方案,我将进一步添加一个
update()
函数

这是我的密码。(格式错误且不完整…抱歉!)


通常不会在另一个类的
\uuuu init\uuu
方法中定义类。相反,我会按照以下思路做一些事情:

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
的实例,并且在
self中引用了类
a
的实例,类
A
的每个实例都向后引用了它所属的类
B
的实例,并将其传递到构造函数中。

以下代码应该有助于指导您应该走的方向:

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()

在您的示例中,不太清楚您试图在何处将值传递到子类中,您能澄清一下吗?当您实例化
home\u base
时,您在运行时定义了两个类,但您从未实际使用过这些类。在Python中很少有像这样声明嵌套类的情况。我非常感谢您的帮助,但老实说,这超出了我目前的理解范围…@ChrisReal那么这就是您应该关注的-理解一般情况,而实际上,<<代码> >第二版> 和 > 实际上是非常重要和基础的。谢谢,我看到了“主”类的定义是如何允许多个屏幕的。我想问一下,为什么在screen.blit()函数之前需要“self.”,或者这与调用它的函数“main()”有关?还有什么是“name”?
self
是必需的,这样就可以在其他
HomeBase
方法中引用屏幕,而不必每次都将
screen
传递给这些方法__name_u是每个模块中的一个全局变量,允许模块知道它是直接执行还是导入。
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()