Class python中的求和

Class python中的求和,class,python-3.x,Class,Python 3.x,我得到了一个错误…我知道我做错了什么,但不知道如何修复它。我知道我不能给整数加字符串…如果有任何想法,我将不胜感激 self.variables['gas'] = 'gas'+add TypeError: Can't convert 'int' object to str implicitly 我的代码: class Cars: def __init__(self, **kwargs): self.variables = kwargs

我得到了一个错误…我知道我做错了什么,但不知道如何修复它。我知道我不能给整数加字符串…如果有任何想法,我将不胜感激

    self.variables['gas'] = 'gas'+add
TypeError: Can't convert 'int' object to str implicitly
我的代码:

class Cars:        
    def __init__(self, **kwargs):
        self.variables = kwargs

    def set_Variable(self, k, v):
        self.variables[k] = v

    def get_Variable(self, k):
        return self.variables.get(k, None)     

    def add_gas(self, add, gas):
        self.variables['gas'] = gas+add


def main():
    mercedes = Cars(gas = 3)
    print (mercedes.get_Variable('gas'))
    print(mercedes.add_gas(4))


if __name__ == "__main__": main()

您的方法add_gas需要两个参数,您只向函数传递一个参数。此外,尽管函数中没有返回值,您仍在打印返回值

这一个对我有用:

class Cars:        
    def __init__(self, **kwargs):
        self.variables = kwargs

    def set_Variable(self, k, v):
        self.variables[k] = v

    def get_Variable(self, k):
        return self.variables[k]     

    def add_gas(self, add):
        self.variables['gas'] +=add

def main():
    mercedes = Cars(gas = 3)
    print (mercedes.get_Variable('gas'))
    mercedes.add_gas(4)
    print (mercedes.get_Variable('gas'))
    print ('There are %s gallons of gas in the car.' % mercedes.get_Variable('gas'))


if __name__ == "__main__": 
    main()

因此,我发现您的代码有两个独立的问题:

  • 在错误消息中,您显示了这一行:

    self.variables['gas'] = 'gas'+add
    
    在代码中,行是这样的:

    self.variables['gas'] = gas+add
    
    这是两种不同的含义。第一种方法尝试将变量
    add
    压缩到字符串
    'gas'
    中,该操作将失败,因为
    add
    是一个整数,Python不会隐式地将整数转换为字符串(错误告诉您)。因此,您需要执行
    “gas”+str(add)

  • main
    函数中,调用
    add\u gas
    方法如下:

    mercedes.add_gas(4)
    
    def add_gas(self, add):
        self.variables['gas'] = self.variables['gas'] + add
    
    但实际上,您使用两个参数定义了该方法,
    add
    gas
    ,因此这将失败

我认为您要做的是,在调用方法时,通过
add
增加
self.variables['gas']
值,因此您希望这样编写您的方法:

mercedes.add_gas(4)
def add_gas(self, add):
    self.variables['gas'] = self.variables['gas'] + add
请注意,您可以使用
+=
操作符将其缩短为:

def add_gas(self, add):
    self.variables['gas'] += add

最后,我不知道你为什么要对你的语言环境实例变量使用字典,但是除非你有很好的理由这么做,为什么不为你的车型定义一个
gas
属性呢?

你的回溯和你的示例代码不匹配。哦,伙计,我明白我是怎么搞砸的了……好吧,这是有道理的。我总是在语法上纠结…谢谢你。我怎么能在x所在的位置打印“目前车里有x加仑的汽油”(mercedes.get_Variable('gas'))。我在任何地方都找不到此语法。如何打印“车内当前有x加仑汽油”,其中x是(mercedes.get_变量('gas'))。我在任何地方都找不到这个的语法。我之所以不定义属性gas,是因为我的类车比gas更复杂…它有许多其他属性,因此,我正在使用kwargs添加它们,因为我也需要它们……否则我会有大量的getter和setter。您可以使用
print'当前有%s加仑“%mercedes.get_Variable('gas')
。另外,在Python中,您不需要编写显式的getter和setter方法,只需直接访问属性。因此,您可以使用
mercedes.gas
mercedes.color
等。此外,如果您的类具有如此多(未知)的属性,您应该重新考虑是否正确设计了应用程序。类在属性方面不应该如此“灵活”。你实现它的方式,它不仅仅是一本字典。完全同意你的观点。