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

2024-10-01 13:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

编程(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

如果我想给其中一个添加一个新属性(我认为这叫做instance属性,因为它不会改变类),那么这两个属性似乎都没有限制-

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

我的noob猜测是因为示例2使用方法(如在“function”中),所以理论上我可以创建示例2的实例,通过向类中的函数添加更多功能(例如,它对某些攻击或条件作出反应的方式),这些实例能够对新的“信息”作出反应。我在想,如果我使用示例1的方法,我就必须在每次需要时在需要的地方添加这种类型的反应式代码,而不是让它在class方法中“生存”?只是我不能通过在示例1中添加函数来解决这个问题吗

那么,与例1相比,例2的优缺点是什么(反之亦然),或者有没有更好的重写方法,让一个比另一个更有优势

侧注- 我现在正在学习一个教程,看起来即使他从示例1开始,并转到了示例2中的样式,我仍然可以完成他在示例1中所做的一切(除了在实例化时更改值),然而,他却让人觉得(没有任何解释)例子2是如此的优越和不同。这就是我的问题。也许在实例化时更改值的能力比我认为的更重要


Tags: 实例方法代码self示例randinthealthdefense
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:59

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

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

对于上述情况,每个新实例将获得相同的默认值,并在程序的连续运行中更改。如果它为attack选择12,则每个实例都将有一个attack12。下一次启动程序时,将对每个实例应用另一个随机选择的值。也许这次每个实例都是2

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

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

相关问题 更多 >