python构造方法__init__()的用法与扩展

前言

本文将介绍__init__函数的用法和具体细节,描述过程由浅入深,希望读者仔细阅读!

解析

面向对象的编程语言都具有构造方法,python的构造方法定义方式如下:

class person():
	def __init__(self):
		print("调用了构造方法")


if __name__ == '__main__':
    zhangsan = person()

运行结果如下,可以看到在创建person对象的时候对自动调用__init__方法。事实上,__init__方法是所有类的内置方法,每个类在创建的时候都会都可以重写该方法作为构造方法。
在这里插入图片描述
下面的代码为构造方法的基本用法

class student:
    def __init__(self,age,name):
        self.age = age
        self.name =name
        self.printMessage()

    def printMessage(self):
        print(self.age)
        print(self.name)


if __name__ == '__main__':
    jack =student(name="jack", age="22")

运行结果如下:
在这里插入图片描述
那么,python中的构造方法只有一个__init__(self,形参),如果碰到需要输入不定量参数的情况该怎么解决呢?

其实,python中有一种独特的形参类型**args,这个形参可以以字符串的形式来引用,具体用下参考下列网址:
python中形参*args和**args的区别

因此我们可以利用这个特性写出这样的代码:

class person:
    def __init__(self,**agrs):
        print("调用了初始化方法")
        self.name = agrs.get("name")
        self.age =agrs.get("age")
        self.printMessage()


    def printMessage(self):
        print(self.age)
        print(self.name)

p1 = person(name="小明", age="18")
p2 = person(age="18",name="小明")
p3 = person(age="18")
p4 = person(name="小明")

输出结果如下

调用了初始化方法
18
小明
调用了初始化方法
18
小明
调用了初始化方法
18
None
调用了初始化方法
None
小明

Process finished with exit code 0

用**args作为形参,在创建对象的时候既可以随意定义形参的位置,也可以更加灵活地选择是否某个属性赋值,十分灵活。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的 Python 扫雷游戏代码示例: ```python import random # 定义常量 BOMB = -1 HIDDEN = 0 UNCOVERED = 1 class Minesweeper: def __init__(self, rows, cols, bombs): self.rows = rows self.cols = cols self.bombs = bombs self.grid = [[HIDDEN] * cols for _ in range(rows)] self.generate_bombs() def generate_bombs(self): bombs_placed = 0 while bombs_placed < self.bombs: row = random.randint(0, self.rows - 1) col = random.randint(0, self.cols - 1) if self.grid[row][col] != BOMB: self.grid[row][col] = BOMB bombs_placed += 1 def uncover(self, row, col): if self.grid[row][col] == BOMB: return False elif self.grid[row][col] == HIDDEN: self.grid[row][col] = UNCOVERED if self.neighbor_bomb_count(row, col) == 0: for r in range(max(0, row - 1), min(row + 2, self.rows)): for c in range(max(0, col - 1), min(col + 2, self.cols)): if r != row or c != col: self.uncover(r, c) return True def neighbor_bomb_count(self, row, col): count = 0 for r in range(max(0, row - 1), min(row + 2, self.rows)): for c in range(max(0, col - 1), min(col + 2, self.cols)): if self.grid[r][c] == BOMB: count += 1 return count def __str__(self): result = '' for row in self.grid: for cell in row: if cell == UNCOVERED: count = self.neighbor_bomb_count(self.grid.index(row), row.index(cell)) result += str(count) if count > 0 else ' ' elif cell == HIDDEN: result += '*' else: result += 'X' result += '\n' return result[:-1] # 示例用法 game = Minesweeper(5, 5, 5) print(game) game.uncover(2, 2) print(game) ``` 该示例代码使用了一个 `Minesweeper` 来表示扫雷游戏,并包含了以下方法: - `__init__(self, rows, cols, bombs)`:构造方法,初始化游戏的行数、列数和炸弹数,并生成游戏网格。 - `generate_bombs(self)`:随机生成指定数量的炸弹。 - `uncover(self, row, col)`:揭开指定位置的格子,并递归揭开周围的空格(如果有的话)。 - `neighbor_bomb_count(self, row, col)`:返回指定位置周围的炸弹数量。 - `__str__(self)`:将游戏网格转换为字符串,方便输出。 你可以根据自己的需求对这个示例代码进行修改和扩展
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zeeland

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值