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

标签 python class object methods

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

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())

通过一些简单的 raw_input() 函数(要求 c1、c2、c3、c4 等)和一个将钱加在一起并返回的函数,这不是很容易实现吗它?这难道不是一种与此类做同样事情的方法吗,但代码行数更少,并且不需要编写 5 个方法来简单地添加一些数字。

最佳答案

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

    print(p.getTotal())

    Wallet.getTotal(p)

现在讨论您问题的 OOP 部分。您应该始终编写将来更容易维护的代码。 OOP 只是使代码易于管理/维护的一种方法。在像您所说的这样的小型程序中,代码可维护性不会成为问题,并且使用 OOP 将是一种矫枉过正。一旦您的代码大小开始增长(例如 100,000 行代码),您需要采用策略来保持代码的可维护性。策略一般是(列表不完整,仅作为示例):

  • 抽象
  • 干燥
  • 模块化编程

最后,归根结底取决于程序员的判断,即使用该编程范例,使他/她在保持良好的代码质量的同时保持最高的工作效率。

关于python - 初学者对python中的类和方法的询问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21950972/

相关文章:

python - 检查python类属性

使用动态列的 JavaScript 数组排序

c# - 字符串如何存储在对象数组中?

c# - IronPython - "AttributeError: object has no attribute"自定义类

python - 当我使用 @observes 时, session 已经刷新

c++ - 作为类成员的函数的定义

c# - 如何从对象 {System.Collections.Generic.KeyValuePair<string, object> 中提取值?

python - 如何使用填充沿新维度重复 numpy 数组?

python - Pyspark Invalid Input Exception try except 错误

java - 在嵌套类中创建对象