나는 자바와 파이썬 코드를 작성하고있다. 많은 언어에서 두 언어의 객체가 일관성없는 방법으로 호출하는 경우가 종종 있습니다. 예를 들어,이 파이썬 코드 조각을 가져 가라. 당신이 호출 할 때, 이러한 예는 모두 매우 유사하다Convention : 메서드를 작성할 때 값을 반환하거나 직접 데이터를 변경해야합니까?
class Bar(object):
def __init__(self, num = 0):
self.num = num
def __str__(self):
return str(num)
def addOne(self):
return Bar(num + 1)
if __name__ == "__main__":
bar = Bar()
print(bar) # Outputs 0
bar.addOne()
print(bar) # Still Outputs 0
bar = bar.addOne()
print(bar) # Now Outputs 1
하지만 푸 클래스 :
class Foo(object):
def __init__(self, num = 0):
self.num = num
def __str__(self):
return str(self.num)
def addOne(self):
self.num += 1
if __name__ == "__main__":
foo = Foo()
print(foo) # Outputs 0
foo.addOne()
print(foo) # Outputs 1
대 (문법은 중요하지, 그냥 방법이 데이터로 작업하는 방법을 참고) Foo.addOne()은 클래스 내부의 num 변수를 변경합니다. 그러나 Bar 클래스는 addOne() 메서드가 num 변수가 업데이트 된 새 객체를 반환합니다. 어떤시기에 어떤 상황이 바람직한지, 사람들은 무엇을 기대합니까? 그리고 이것은 언어 간 차이가 있습니까?
그냥 증가 시키려면 왜 새 오브젝트를 돌려 주겠습니까? 문제는 증가 시키거나 (객체 변경) 새로운 객체가 필요합니까? 아마도 중복 객체를 피할 수 있다면 새로운 객체를 반환하지 않아도됩니다. – user1767754
메서드가 전달 된 개체의 상태를 수정할 수있는 메서드 (예 : 계산 메서드에서 값을 반환 할 수있는 개체)가 컨텍스트에 있다고 가정합니다. – MadProgrammer
@ user1767754 죄송합니다. 이것은 나쁜 예입니다. 실제 시스템에서는 쓸모가 없습니다. 하지만, 그것은 예입니다 – Jerfov2