x = obj1 + obj2
return x+y
x = obj1 + obj2
x+= obj3
return x+y
를 추가하려고합니다.
x = obj1 + obj2
return x+y
x = obj1 + obj2
x+= obj3
return x+y
를 추가하려고합니다.
모든 것이 가능하다 추가 할 스택 조작을 수행하고 런타임에 바이트 코드를 삽입 할 수 있습니다. 같은 물건을 byteplay
과 같이 보아라.
그런 수정은 직관력이없고 읽을 수 없으므로, 먼저 x += obj3
을 남겨두고 obj3
을 0
으로 설정하면 더 좋습니다. 그 행이 필요할 때 obj3
에 0이 아닌 값을 사용합니다 ...
그냥 바이트 플레이를 찾고 있었는데, 조사 할만한 가치가있는 영역을 보았습니다. – user537638
런타임 중에 메소드의 기능을 변경하는 것은 항상 어떤 프로그램을 수행하는지입니다. 그것은 "일반화 (generalizing)"라고 불립니다.
당신이하는 일은보다 일반적인 알고리즘을 작성하는 것뿐입니다. 그것은 어렵지 않습니다.
def run_time_change(y, *object_list):
x=sum(object_list)
return x+y
example1 = run_time_change(y, obj1, obj2)
example2 = run_time_change(y, obj1, obj2, obj3)
"런타임"코드가 변경되는 곳이 없습니다. 그건 틀렸어요.
더 정확한 알고리즘을 작성하는 것이 올바른 일입니다.
괜찮 았는데, 합계는 단지 예제 일뿐입니다. 이것을 생성하는 방법은 내가 알고 싶었던 것입니다! – user537638
@ user537638 : "합계가 그 예"였습니다. 런타임에 코드를 수정하지 마십시오. 당신은보다 일반적인 알고리즘을 작성합니다. 이 경우 좀 더 일반적인 알고리즘을 작성했습니다.** 모든 ** 경우 (** all **)에서는보다 일반적인 알고리즘을 작성합니다. –
이상적인 상황이지만, 때로는 사용자가 무엇을 바꾸고 싶은지 모릅니다! 내 사용자 (과학자)는 때로는 문장, 방법 등을 '마음'에 맞게 변경하려고합니다. 피드백에 감사드립니다! – user537638
파이썬 클래스는 수 런타임에 변경 될 수있는 개체입니다. 그래서 예를 들면 :
class Dog:
def talk(self):
print "bark"
dog1 = Dog()
dog1.talk() # --> Bark
def cat_talk(self):
print "Meow"
Dog.talk = cat_talk
dog1.talk() # --> Meow
하지만 당신이 또는 누구든지 같은 일을 원하지 않는 확실히이 프로그램은 당신을 죽일 것을 시도 할 것이다 유지하거나 디버깅 할 것이다 (그리고이 사람은 아마 자신이 될 것입니다)
당신이하고 싶은 것을 완전히 명확하게 밝히지는 않았지만, changing methods and classes at runtime is called "Monkey Patching", 그리고 파이썬에서 (그 이름에서 알 수 있듯이) 눈살을 찌푸리게됩니다.
이유는 어떤 버전의 메소드가 호출되는지 코드를 읽는 것만으로 쉽게 알 수 있기 때문에 코드를 디버그하기가 매우 어렵 기 때문입니다. 또는 디버깅을 수행하는 사람은 메소드가 변경되었음을 알지 못하기 때문에보고있는 모든 동작을 이해할 수 있습니다.
메소드를 동적으로 변경할 수 있지만 그렇게하지 않는 것이 가장 좋습니다. 해결하려는 문제에 대한 자세한 내용을 제공하면 다른 사람이 더 "Pythonic"솔루션을 제안 할 수 있습니다.
http://mywiki.wooledge.org/XyProblem –
무엇이'y'입니까? 'Y'는 무엇입니까? 'return x = Y'는 무엇을 의미합니까? –
return x = y, whatrever x와 y는 파이썬에서 유효하지 않은 표현입니다. – Ant