2017-08-22 22 views
0

我有一个类,我很期待这样的:简单的类属性更新

print(rithesh.amount) = 150. 

我怎样才能做到这一点?

这里是我的代码:

class Customer: 

    total_amount = 0 

    def __init__(self, name, mob, email, amount=None): 
     self.name = name 
     self.mob = mob 
     self.eamil = email 

    def add_amount(self, amount): 
     self.amount = amount 

rithesh = Customer("Rithesh", "8896398598", "[email protected]") 
rithesh.add_amount(100) 
rithesh.add_amount(50) 
print(rithesh.amount) 
+1

将'='改为'+ ='。或者'self.amount = self.amount + amount'。 –

+1

不应该你的total_amount变量被称为金额?否则你的add_amount方法递增total_amount值,然后引用rithesh.total_amount? – AK47

+2

在__init__中声明self.amount = 0,在add_amount中声明+ = – PRMoureu

回答

5

你可以声明你的量可变的__init__方法为0。然后在您的add_amount方法中做一个小改动。

class Customer: 

    total_amount = 0 

    def __init__(self, name, mob, email, amount=None): 
     self.name = name 
     self.mob = mob 
     self.eamil = email 
     self.amount = 0 

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

    rithesh = Customer("Rithesh", "8896398598", "[email protected]") 
    rithesh.add_amount(100) 
    rithesh.add_amount(50) 
    print(rithesh.amount) 

输出

150 
+0

谢谢你。加工。 –

-2

正在发生的事情是,当你调用add_amount您不添加价值self.amount你只是设置它。

self.amount = amount 

到:

刚刚从改变add_amount定义

self.amount += amount 

,并加入到__init__方法:

self.amount = 0 
+0

获取跟随错误。 :Traceback(最近调用最后一个): 文件“C:\ Users \ Rithesh B \ Desktop \ test321_simple - Copy.py”,第14行,在 rithesh.add_amount(100) 文件“C:\ Users \ Rithesh B \ Desktop \ test321_simple - Copy.py“,第11行,在add_amount中 self.amount + =金额 AttributeError:'客户'对象没有任何属性'金额' –

+0

这是行不通的,因为在调用add_amount时,'self.amount'不会退出。所以'self.amount + = amount'会引发'AttributeError'。 –

+0

哦,我没有看过'''__init__'''方法。我假设''''self.amount''已经在'''__init__'''中初始化了。 – Strinnityk

0

是怎么做到这一点。

我必须在初始化期间声明值self.amount = 0。

class Customer: 

    total_amount = 0 

    def __init__(self, name, mob, email, amount=None): 
     self.name = name 
     self.mob = mob 
     self.eamil = email 
     self.amount = 0 

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

rithesh = Customer("Ritehsh", "8892398598", "[email protected]") 
rithesh.add_amount(100) 
rithesh.add_amount(50) 
print(rithesh.amount) 

因此获得作为打印(rithesh.amount)输出= 150

+1

为什么你在回答你自己的问题时arjit已经回答了吗? –

+1

是的,对于总计算你是对的。但是,如果您需要适当的财产使用方式,请参阅下面我的回答 – nanithehaddock

1

在python具有属性的实际方法是使用@property装饰

例如,在你的类:

class Customer: 

    total_amount = 0 

    def __init__(self, name, mob, email, amount=None): 
     self.name = name 
     self.mob = mob 
     self.eamil = email 

    @property 
    def add_amount(self): 
     return self.add_amount 

    @add_amount.setter 
    def add_amount(self, amount): 
     self.add_amount = amount 


rithesh = Customer("Rithesh", "8896398598", "[email protected]") 
rithesh.add_amount = 150 
print(rithesh.add_amount) 
+0

这是属性使用 – nanithehaddock

+0

谢谢。但我想这个作为实例方法。通过在初始化期间声明值self.amount = 0。 –