2014-07-22 4 views
0

어떻게해야합니까?개체의 특성 변경 및 전달

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

인스턴스 속성을 만들 때 설정하지 않아도됩니다. self.foo = bar이라고 말하면 원할 때마다 설정할 수 있습니다. 클래스 인스턴스의 함수 내에서 또는 다른 함수에서 수행하거나 메인 코드에서 처리 할 수 ​​있습니다. 할당하기 전에 선언 할 필요조차 없습니다. 어떤 시점에서 자동차에 doors 속성이 있다고 결정하면 번거 로움없이 자동차 인스턴스를 제공 할 수 있습니다. 객체는 꽤 유연합니다. car1.tires = 453라고 말하면 타이어 수를 변경할 수 있습니다.

그냥 속성을 변경하는 방식으로 들어가기 위해 private/public 가지 또는 다른 번거 로움이 없습니다. Java와 같은 언어로 된 게터와 설정자를 필요로하지 않습니다. 어쨌든 변수를 보호하지 않기 때문입니다. 어느 곳에서나 직접 액세스 할 수 있습니다 (자바 프로그래머가 약간 짜증나게하지만 Python이 작동하는 방식입니다).

클래스 기능을 사용하려면 car1.gTires 대신 car1.gTires()을 사용해야합니다.

+0

@CladClad 엄격히해야 할 일인지 확신 할 수 없습니다. 그가 가지고있는 코드에서'car1' 함수는 모두'car1'이 재 할당되기 전에 평가 될 것이기 때문에 오류가있을 것이라고 저는 믿지 않습니다. 더 중요한 것은 타이어 수를 변경하기 위해 완전히 새로운 'car'객체를 생성 할 필요가 없다는 것입니다. – TheSoundDefense

+0

아, 내 잘못이야. 나는 그가 다른 타이어와 비교하여 단지 하나의 타이어로 새 차를 만들고 싶다고 생각했지만, 당신이 옳은 타이어 하나를 추가하고 싶다.) 미안 –

+0

@CladClad 아무 문제가 없다. – TheSoundDefense