使用类比可调用函数有什么主要优点?

时间:2014-05-12 01:33:07

标签: python function class python-3.x

今天我想知道类相对于可调用函数有什么优势。我知道这似乎是一个奇怪的问题,但我正在编写一个基于太空的游戏,我想做一些显示生命支持(氧气,氮气)的东西 基本上,我有这个功能:

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' .."

基本上......在我所展示的代码中使用类的真正优势是什么?为我的目的使用一个类或一个函数,或两者兼而有之?

2 个答案:

答案 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中添加新信息