【问题标题】:What information is __init__.storing?__init__.storing 是什么信息?
【发布时间】:2014-03-24 05:15:12
【问题描述】:

我在某处读到__init__ 在创建对象时存储信息。所以,假设我有这个代码:

class BankAccount(object):
    def __init__(self, deposit):
        self.amount = deposit 

    def withdraw(self, amount):
        self.amount -= amount

    def deposit(self, amount):
        self.amount += amount

    def balance(self):
        return self.amount 

myAccount = BankAccount(16.20)

x = raw_input("What would you like to do?")

if x == "deposit":    
    myAccount.deposit(int(float(raw_input("How much would you like to deposit?"))))
    print "Total balance is: ", myAccount.balance()   
elif x == "withdraw":    
    myAccount.withdraw(int(float(raw_input("How much would you like to withdraw?"))))
    print "Total balance is: ", myAccount.balance()    
else:
    print "Please choose 'withdraw' or 'deposit'. Thank you."

__init__ 在做什么或存储什么。我不明白什么是“self.amount”或者如何使它=存款做什么。 __init__下的“self.amount”和withdraw下的一样吗?我只是不明白“self_amount”是做什么的。

【问题讨论】:

  • 这里已经解释过了:stackoverflow.com/questions/576169/…
  • @Christian 我目前一直在使用 learnpythonthehardway,我访问过很多网站并阅读了很多内容,但没有找到我的问题的答案。这就是我来这里的原因。
  • 如果您对self.amount 所做的事情有误解,您应该尝试提出一个更简单的示例。试着想出一个你不懂的最简单的例子。

标签: python class object init self


【解决方案1】:

问__init__在做什么或存储什么?

A __init__ 会在您构造类的实例时被调用。这适用于所有班级。通常在此函数中初始化所有数据。在您的特定情况下,您正在创建一个名为 amount 的成员数据,并将其分配为与传递给函数的 deposit 参数相同。

Q我不明白"self.amount" 是什么,也不明白= deposit 是怎么做的。

A 声明self.amount = deposit 完成了几件事。它创建一个名为amount 的类的成员数据并将其分配为deposit 的值。

Q__init__下的"self.amount"和withdraw下的一样吗?

一个是的。

Q我只是不明白"self.amount" 做了什么。

A 它允许您捕获对象的数据。每个类都需要弄清楚它需要正确工作的成员数据。在您的情况下,您需要的唯一数据是amount。如果你有一个名为Employee 的类,它可能看起来像:

class Employee(object):
    def __init__(self, firstName, lastName, id, salary):
        self.firstName = firstName 
        self.lastName = lastName 
        self.id = id 
        self.salary = salary 

【讨论】:

    【解决方案2】:

    在 Python 中,__init__() 是在创建类的实例时调用的方法。该方法通常用于初始化实例变量。初始化后,可以在其他方法中使用。

    关于self.amount,它是一个实例变量(也有类变量)。换句话说,一个属性。

    你的班级是BankAccount,每个银行账户都应该有一个金额。这就是实例变量变得有用的时候!

    创建实例时

    myAccount = BankAccount(16.20)
    

    __init__() 方法被调用,(你可以通过在里面放一个print 来看到这一点),它会将self.amount 设置为16.20。

    【讨论】:

    • 哦,添加打印对我有很大帮助。我的问题是它说的:self.amount = deposit,我没有意识到我可以将“deposit”更改为“amount”并且它不会改变任何东西。
    【解决方案3】:

    根据您的问题,我认为您是面向对象编程 (OOP) 的新手。 我建议阅读它,以及它是如何在 Python 中实现的。 这是一个简短的起点:http://www.tutorialspoint.com/python/python_classes_objects.htm

    然后随意搜索您在那里学到的新概念。

    简而言之,直接进入您的问题的重点:

    • 类是对象模板;
    • 实现此类模板的对象称为类的实例;
    • 对象可能具有实例变量,这些变量存储每个实例特定的值;
    • 类可以定义一个构造函数,在创建类的实例时调用。这些构造函数通常用于初始化实例变量。
    • 在 Python 中,类的所有方法都将它们处理的实例作为参数,按照约定命名为 self
    • 在 Python 中,__init__ 是构造函数的名称

    所以在 Python 中,当你调用 myAccount.deposit(10) 时,你可以说它等同于 BankAccount.deposit(myAccount, 10)。所以是的,self 变量在您的所有四种方法中都是“相同的”,在您的示例中,它被分配了myAccount。

    【讨论】:

    • @Christian 你是对的。我编辑使它更像一个答案,希望它有效。
    【解决方案4】:

    您可能将 self.amount 与 amount 混淆了。 self.amount 是一个与BankAccount 类关联的变量,它在创建该类的实例时被初始化。所以,self.amount 在你的类中到处都是一样的,但是 amount 是一个参数,所以它取决于你在函数调用时给出的值。 阅读:http://docs.python.org/2/tutorial/classes.html 和http://www.voidspace.org.uk/python/articles/OOP.shtml#the-init-method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 2010-12-23
      • 2013-01-16
      • 1970-01-01
      • 2023-02-06
      • 2021-06-08
      • 2021-06-10
      相关资源
      最近更新 更多