gpt4 book ai didi

python - 哪种创建类属性的方法更好,为什么?

转载 作者:行者123 更新时间:2023-11-30 23:05:10 24 4
gpt4 key购买 nike

我才开始编程(Python)几个月左右,我正在努力解决这个问题,这样我就不会编写低效的代码。

假设我正在为游戏中的默认敌人创建类。我使用“ENEMY01”和“HERO01”只是为了清楚起见(它们都可以被认为是不同编写的“相同”类)。考虑这个伪代码;如果有任何错误,那只是因为我在这篇文章中错过了它们,而且我的代码本身没有问题。如果您有更有效的方式来编写我所写的内容,我们将不胜感激。

示例1-

class ENEMY01:
attack = randint(0,20)
defense = randint(1,20)
health = 100

示例2-

class HERO01:
def __init__(self, attack=randint(1,20),defense=randint(1,20), health=100)
self.attack = attack
self.defense = defense
self.health = health

在我看来,示例 1 更好,因为它更短且更容易理解。对于示例 2,由于存在默认值,您可以坚持使用默认值,也可以在实例化时更改它们。我知道这可能是一个小好处,但我注意到您也可以在创建后立即使用这两个示例更改这些默认值-

Jobo = ENEMY01()
Jobo.attack
10
Jobo.attack = 15
Jobo.attack
15

Bobo = HERO01()
Bobo.attack
10
Bobo.attack = 15
Bobo.attack
15

如果我想向其中一个添加一个新属性(我认为这称为实例属性,因为它不会更改类),那么似乎两者都没有限制 -

Bobo.scream = 'Ouch'
Bobo.scream
'Ouch'
Jobo.scream = 'Ouch'
Jobo.scream
'Ouch'

我的菜鸟猜测是,因为示例 2 使用方法(如“函数”中),理论上我可以创建示例 2 的实例,这些实例能够通过添加更多功能来对新“信息”使用react类中的函数(例如,它对某些攻击或条件使用react的方式)。我在想,如果我采用示例 1 的路线,每次我需要它时,我都必须添加这种类型的 react 性代码,而不是让它在类方法中“存活”?除了我不能通过向示例 1 添加函数来解决该问题吗?

那么,示例 2 相对于示例 1(或反之亦然)的优点和缺点是什么,或者是否有更好的方法来重写其中一个,从而使一个比另一个具有不可能匹配的优势?

旁注-我现在正在学习一个教程,似乎即使他从示例 1 开始,并已转向示例 2 中的样式,我仍然可以完成他在示例 1 中所做的所有事情(除了值的更改)在实例化时),但他(没有解释)让示例 2 显得更加优越和不同。因此我的问题。也许在实例化时更改值的能力比我所认为的更重要?

最佳答案

两者都不是“更好”,因为它们不同。

class ENEMY01:
def __init__(self):
self.attack = randint(0,20)
self.defense = randint(1,20)
self.health = 100

对于上述情况,每个新实例将具有不同的随机值。

class HERO01:
def __init__(self, attack=randint(1,20),defense=randint(1,20), health=100)
self.attack = attack
self.defense = defense
self.health = health

对于上述情况,每个新实例都将获得相同的默认值,并在程序的连续运行时发生变化。如果它选择 12 作为攻击,则每个实例的攻击将为12。下次启动该程序时,您将获得应用于每个实例的另一个随机选择的值。也许这次每个实例都是 2

此外,类变量与实例变量有本质上的不同,您不应该使用一个变量来模仿另一个变量。

总的来说,您应该将 __init__() 与您打算调用和使用该类的方式相匹配。

关于python - 哪种创建类属性的方法更好,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33313552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com