python 中缺少参数

Missing argument in python

你好,我是编程新手,我对 Python 有疑问。 对于扫雷器,我想在 class 炸弹中创建一个方法,以便将炸弹随机放置在数组中,这就是我写的:

from random import randint

import numpy as np

a = np.zeros((9, 9), dtype="i")
print(a)

class bomb:
    def __init__(self, nb):
        self.nb = nb

    def init_bomb(self, nb):
        i = 0
        for i in range(0, nb):
            x = randint(0,8)
            y = randint(0,8)
            a[x,y] = 9


bomb.init_bomb(10)

print(a)

当我 运行 代码时,我得到这个错误:

TypeError: init_bomb() missing 1 required positional argument: 'nb'

我不明白为什么要这样,因为我在括号之间写了我想要的 nb :

bomb.init_bomb(10)

您没有初始化 bomb 实例。试试这个:

from random import randint

import numpy as np

a = np.zeros((9, 9), dtype="i")
print(a)

class bomb:
    def __init__(self, nb):
        self.nb = nb

    def init_bomb(self):
        i = 0
        for i in range(0, self.nb):
            x = randint(0,8)
            y = randint(0,8)
            a[x,y] = 9


new_bomb = bomb(10)
new_bomb.init_bomb()

print(a)

您应该像这样通过 class 调用初始化器:

my_bomb = bomb(10)

记得保存到变量中否则会丢失

错误消息试图告诉您缺少 self 参数。

调用 class 方法的正常方法是创建一个实例,然后在该实例上调用该方法:

bombs = bomb(10)
bombs.init_bomb(10)

但是,按照惯例,__init__ 方法应该完成所有必要的设置(按照惯例,class 的名称应该大写):

class Bomb:
    def __init__(self, nb):
        self.nb = nb
        self.init_bomb()

    def init_bomb(self):
        # i = 0  # not necessary
        for i in range(0, self.nb):
            x = randint(0,8)
            y = randint(0,8)
            a[x,y] = 9

还要注意 init_bomb 如何读取 self.nb,因此它只需要 self 句柄来访问 nb 属性。

现在,您只需

bombs = Bomb(10)

(全局变量a应该也是一个参数。)

A class 可以定义一个 @staticmethod,它可以而且必须在没有 self 参数的情况下被调用,但是在这里,您可能想要操作一个特定的实例。 (还有 @classmethod 定义了一个方法,其第一个参数是 class 本身。)

一个更明智的设计可能是 class Field,您可以使用所需矩阵的大小和要放入其中的炸弹数量对其进行初始化。 Bomb 只拥有一些炸弹(在这种情况下它应该是复数 Bombs ,不是吗?)然后迅速忘记它们在哪里真的没有意义。

您需要先初始化炸弹实例


import numpy as np

a = np.zeros((9, 9), dtype="i")
print(a)

class bomb:
    def __init__(self, nb):
        self.nb = nb

    def init_bomb(self):
        i = 0
        for i in range(0, self.nb):
            x = randint(0,8)
            y = randint(0,8)
            a[x,y] = 9


new_bomb = bomb(10)
new_bomb.init_bomb()

print(a)

你还没有调用初始化程序 使用变量初始化炸弹 class

import numpy as np

a = np.zeros((9, 9), dtype="i")
print(a)

class bomb:
   def __init__(self, nb):
    self.nb = nb

   def init_bomb(self):
    i = 0
    for i in range(0, self.nb):
        x = randint(0,8)
        y = randint(0,8)
        a[x,y] = 9


       new_bomb = bomb(10)
       new_bomb.init_bomb()