今天我想知道类相对于可调用函数有什么优势。我知道这似乎是一个奇怪的问题,但我正在编写一个基于太空的游戏,我想做一些显示生命支持(氧气,氮气)的东西 基本上,我有这个功能:
oxygen = 100
nitrogen = 100
air = [oxygen, nitrogen]
print("You can use check(air) to see the quantities of n2 and o2 available.")
def check(variable):
if variable == air:
print("Your oxygen level is {0}% and your nitrogen level is {1}%.".format(oxygen, nitrogen))
因此,每当玩家进行类型检查(空气)时,他们就能看到船上的氮和氧气量。使用这个我也可以通过扩展check()函数让他们看到其他功能。我想知道为游戏做这件事是否更好而不是这样做:
class Lifesupport(object):
def __init__(self, oxygen, nitrogen):
self.oxygen = oxygen
self.nitrogen = nitrogen
air = Lifesupport(40, 60)
#This part is for checking functionality
print("Your air has {0}% oxygen and {1}% nitrogen".format(air.oxygen, air.nitrogen))
就个人而言,我更喜欢这个功能,虽然我不知道哪个更适合用于此目的。我知道你可以输入air.oxygen来查看氧气水平,我可以使用check()函数来打印一个类"捆绑"喜欢' air' .."
基本上......在我所展示的代码中使用类的真正优势是什么?为我的目的使用一个类或一个函数,或两者兼而有之?
答案 0 :(得分:1)
要打印氧气和氮气,您可以这样做:
class Lifesupport(object):
def __init__(self, oxygen, nitrogen):
self.oxygen = oxygen
self.nitrogen = nitrogen
def __str__(self):
return "Your air has {0}% oxygen and {1}% nitrogen".format(self.oxygen, self.nitrogen)
然后,只要您想显示Lifesupport
级别,就可以执行以下操作:
air = Lifesupport(40, 60)
print(air)
__str__
方法会覆盖类的默认__str__
方法,因此当您执行print(air)
时,它会打印自定义文本。
对于类与方法,建议您使用类,尤其是当您知道要扩展程序时,因为您可以创建一个类的多个实例,这些实例都具有可以独立修改的属性彼此的。以下是一个例子:
class A:
def __init__(self,num):
self.val = num
a = A(4)
b = A(5)
>>> print(a.val)
4
>>> a.val = 6
>>> print(a.val)
6
>>> print(b.val)
5
答案 1 :(得分:0)
Class是一个Instance工厂。您可以创建类自定义&的多个实例(a.k.a副本)。根据需要扩展它(通过继承和重载方法)。
如果您想重新使用或自定义已经编写的函数,那么在课程中使用它是可行的方法。如果你还没有做到这一点,我建议你通过课程编码基础来决定。一个简单的例子可能是
class Person:
def __init__(self, name, job=None, pay=0):
self.name = name
self.job = job
self.pay = pay
def giveRaise(self, percent):
self.pay = int(self.pay * (1 + percent))
class Manager(Person):
def __init__(self, name, pay): # Redefine constructor
Person.__init__(self, name, 'mgr', pay) # Run original with 'mgr'
def giveRaise(self, percent, bonus=.10):
Person.giveRaise(self, percent + bonus)
我通过继承原始类&来定制原始类'init'方法。在Manager Class中添加新信息