更改和传递对象的属性

时间:2014-07-22 13:42:47

标签: python class object instance-methods

我该怎么做?

class car:
    def __init__(self, tires, color, age):
        self.tires = tires
        self.color = color
        self.age = age
    def gTires(self):
        return self.tires
    def gColor(self):
        return self.color
    def gAge(self):
        return self.age

car1 = car(3, "Red", "1996")
carTires = car1.gTires
carColor = car1.gColor
carAge = car1.gAge

print("Your car 'car1' is done. It has " + carTires + " tires, is " + carColor + " and was made year " + carAge)
print()
print("But I heard you wanted it to have four tires?")
print("No problem (right?).")

car1 = car((car1.gTires + 1), (car1.gColor), (car1.gAge))

所以我的问题是关于如何使用属性,我是否必须像开始时那样设置所有变量?我的意思是,我不希望它们成为实例方法,但如果我不设置它们,它们似乎就是这样。另外,在最后一行,我想改变car1所具有的轮胎数量的值,我不想改变所有其他属性。如果不设置所有其他属性,有没有办法做到这一点?

对不起,如果这没有用,请问我是否觉得你很难理解我的问题。

1 个答案:

答案 0 :(得分:1)

您不需要在创建实例属性时设置它;你可以随时或多或少地设置它,只需说self.foo = bar即可。您可以在类实例的功能中,或在不同的功能中,或仅在主代码中执行此操作。在分配之前,您甚至不需要声明它;如果在某些时候你决定汽车有doors属性,那么你可以毫不费力地给任何汽车实例一个。对象非常灵活。您只需说出car1.tires = 453即可更改轮胎数量。

没有private/public的事情或任何其他麻烦,只会更改属性妨碍你。你不需要像Java那样需要getter和setter,因为他们无论如何都不会保护你的变量。你可以从任何地方直接访问它们(这让我的Java程序员有点娇气,但这就是Python的工作方式)。

另一方面,要使用类功能,您需要说car1.gTires()而不是car1.gTires