编程(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'
我的noob 猜测是因为示例2使用方法(如' function'),理论上我可以创建示例2的实例,它们能够对新的&#作出反应39;信息'通过向类中的函数添加更多功能(例如,它对某些攻击或条件作出反应的方式)。我想,如果我去示例1的路线,我每次需要时都需要添加这种类型的无效代码,而不是让它活着。在类方法?除非无法通过向示例1添加函数来解决该问题吗?
那么示例2的优缺点与示例1相反(或反之亦然)或是否有更好的方法来重写其中一个无法匹配优于另一个 ?
旁注 - 我现在正在阅读一个教程,看起来即使他从示例1开始,并且已经转到示例2中的样式,我仍然可以完成他在示例一中所做的一切(除了在实例化中改变价值观之外),然而他似乎(没有解释)表明示例2更加优越和不同。因此我的问题。也许在实例化时改变价值观的能力比我给它的信誉更重要?
答案 0 :(得分:3)
两者都不“更好”,因为它们不同。
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
选择attack
,则每个实例都会attack
12
。下次启动程序时,您将获得另一个随机选择的值应用于每个实例。也许这次对每个实例都是2
。
此外,类变量与实例变量有很大的不同,你不应该使用一个来模仿另一个。
总的来说,您应该将__init__()
与您打算调用和使用该类的方式相匹配。