는 :어떻게 파이썬 3에서 file.write()를 오버라이드합니까?
old_file_write = file.write
class file():
def write(self, d):
if isinstance(d, types.bytes):
self.buffer.write(d)
else:
old_file_write(d)
# ... some code I cannot change or do not want to change
f = open("x")
f.write("...")
f.write(b"...")
sys.stdout.write(b"...")
sys.stdout.write("...")
print(b"...")
print("...")
문제는 그 파이썬은 오류가 생성됩니다 첫 번째 줄을 3.X에서 :
NameError: name 'file' is not defined
어떻게을 파이썬 3.x에서이 작업을 수행합니까?
사실, 2 년 후, 저는 여전히 두 버전 (2.5+ 및 3.x)에서 모두 사용할 수있는 솔루션을 찾고 있습니다.
아직도 내가 왜 이것을 찾고 있는지 궁금한 분들을 위해, 파이썬의 새로운 버전을 사용하기 위해 오래된 코드 (다른 코드, 때로는 수정할 수없는 코드)를 만들 수 있습니다.
는이것은 당신이 나쁜 코드와 잘 재생 일부 코드 :
"파일"개체 란 무엇입니까? 더 많은 코드를 입력하십시오. –
자세히 설명해주십시오. 'file'은 파일 객체입니까? 'file.write'는 당신이'old_file_write'에 할당 한 함수 객체입니까, 아니면'file'에 무엇인가를 쓰고'old_file_write'에 기록 된 바이트 수를 저장하려고합니까? – JAB
@Sorin Sbarnea : 문자열과 바이트를 혼동하면 문제가 없습니다. 문자열과 바이트를 같은 것으로 취급 할 수는 없습니다. 그들은 같은 것이 아닙니다. 당신이하는 일은 간단한 방식으로 일할 수 없습니다. 문자열은 바이트로 인코딩됩니다. 그것들은 별개의 것입니다. 응용 프로그램이 손상된 경우 올바르게 수정하여 문자열을 디코딩하십시오. - S.Lott 0 초 전 편집 –