0

我认为自己是 Python 的中级初学者,因为我已经完成了 LPTHW 的最后几章以外的所有内容,并且还完成了其他几个教程。但是,我似乎无法弄清楚 OOP。让我举个例子。如果我尝试编写一个简单的城市模拟游戏,我可以有一个类“建筑物”,它有一个名为“函数”的方法,可以根据参数改变它的作用?所以,以这个为例

class Buildings(object):
    def __init__(self, function):
        self.function = function
    def function(self):
        if function == '1':
            print 'blablabla'
        elif function == '2':
            print 'blablabla'



Granary = Building('1')
Granary.function()

(用实际的动作名称替换数字,用实际的函数替换打印语句)这是应该如何使用类的吗?(毕竟,'应该最好只有一种做事方式'显然是pythonistas应该相信的:p)或者有没有更有效的方式来做到这一点?还是我是个白痴?

4

2 回答 2

0

这是我认为你想要的:

class Buildings(object):
    def __init__(self, function):
        self.function = function
    # Don't name an attribute the same as a method
    def myMethod(self):
        # Use self.function instead of function
        if self.function == '1':
            print 'blablabla'
        elif self.function == '2':
            print 'blablabla'



Granary = Buildings('1')
Granary.myMethod()

编辑:

根据您在评论中所说的话,我不得不说答案取决于您打算做什么。每个场景都是不同的,在一个场景中,即使它在另一个场景中是最好的,也可能不是最好的解决方案。通常,没有真正的理由只使用一种方法来创建整个类。例如,在您上面的代码中,您还可以执行以下操作:

def Buildings(function):
    if function == '1':
        print 'blablabla'
    elif function == '2':
        print 'blablabla'
Buildings('1')

得到完全相同的结果。

于 2013-08-11T22:59:15.307 回答
0

这是重写的类,以执行我认为您想要的操作:

class Building(object):
    def __init__(self, case):
        self.case = case
    def function(self):
        if self.case == '1':
            print 'blablabla'
        elif self.case == '2':
            print 'blablabla'



Granary = Building('1')
Granary.function()

有很多方法可以做你想做的事,以上就是其中之一。

于 2013-08-11T23:00:26.420 回答