初学者对python中的类和方法的查询

时间:2014-02-22 06:57:26

标签: python class object methods

我一直在学习类以及如何在python中进行“面向对象”的编程。但是,我仍然难以理解类和方法背后的一些概念。我知道类充当模板来创建“对象”,但这个模板究竟做了什么?什么是使用的“自我”参数?例如,我很困惑以下代码在没有类的情况下无法完成的任务:

class Money:
    def __init__ (self, v =0):
        self.value = v
    def getValue (self):
        return self.value
class Wallet:
    def __init__ (self, b = 0):
        self.balance = b
    def addMoney (self, c):
        self.balance += c.value
    def getTotal(self):
        return self.balance

c1 = Money(50)
c2 = Money(100)
c3 = Money(5)
c4 = Money(20)

p = Wallet()
p.addMoney(c1)
p.addMoney(c2)
p.addMoney(c3)
p.addMoney(c4)
print(p.getTotal())

对于c1,c2,c3,c4等要求的一些简单的raw_input()函数以及将钱汇总并返回的函数,这难道不会轻易实现吗?这可能不是一种做同样的事情的方法,但是代码行少,而且不需要编写5种方法来简单地添加一些数字。

3 个答案:

答案 0 :(得分:1)

你创造了多么美丽的稻草人论点! 你批评面向对象编程使用一个简单的例子。

OOP是一种组织对大型程序有用的代码的方法。

有许多复杂的结构可以用对象来表示,这些对象现在是日常编程说话(模式)的一部分。在http://www.oodesign.com/中,您可以看到几个。

我建议你真正学习并尝试使用OOP一年,然后只使用它对你有意义。

答案 1 :(得分:1)

首先,'self'是对调用该方法的类实例的引用。在幕后,Python翻译

    print(p.getTotal())

    Wallet.getTotal(p)

现在提出问题的OOP部分。您应该始终编写更容易维护的代码。 OOP只是使代码易于管理/维护的一种方法。在像你所说的那样的小程序中,代码可维护性不会成为一个问题,使用OOP将是一种过度杀伤力。一旦您的代码大小开始增长(如100,000行代码),您需要采用策略来保持代码的可维护性。策略通常是(列表不完整,仅举例):

  • 抽象
  • DRY
  • 模块化编程

最后,它归结为程序员的判断,使用该编程范例,使他/她在保持良好代码质量的同时最有效率。

答案 2 :(得分:0)

是的,只需要一个可以将钱加在一起的函数就更简单了,但是这个脚本只是为了演示python中面向对象编程的能力。此外,为了改进此脚本,是的,您可以添加一个简单的raw_input()来获取金额。 self参数也用于给某个“对象”一个属于它自己的变量,也就是一个局部变量。