__str__()
의 출력을 변경하고 싶습니다. **kwargs
을 추가하고 싶습니다.개체의 __str __()의 서명에 ** kwargs를 추가하는 방법은 무엇입니까?
문제점 : 함수의 서명을 변경할 수없는 것처럼 보입니다. 예를 들어
:
#!/usr/bin/env python3
class my_printable_obj(object):
def __init__(self, s):
self.content = s
def __str__(self, **kwargs):
fancy = kwargs.get('fancy', '')
return str(self.content) + fancy
M = my_printable_obj("Something to print")
print(str(M))
print(str(M, fancy=' + a fancy part'))
출력은 :
$ ./test_script3str.py
Something to print
Traceback (most recent call last):
File "./test_script3str.py", line 17, in <module>
print(str(M, fancy=' + a fancy part'))
TypeError: 'fancy' is an invalid keyword argument for this function
나는 형식 오류 메시지에도 불구하고, 파이썬 (쉽게 관찰 __str__()
의 시작에 print('here')
를 추가 할 수 있습니다) my_printable_obj.__str__()
를 사용 않았다 것을 알 수 있습니다.
해결 방법이 있습니까? 아니면 어떤 이유로 든 가능하지 않습니까? into_str(self, **kwargs)
과 같은 다른 함수를 정의하고 __str__()
대신 M.into_str(fancy=' something more')
을 사용해야합니까?
주 :이 글을 쓰는 :
def __str__(self, fancy=''):
return str(self.content) + fancy
정확히 같은 오류를 제공합니다.
'str()'의 표준 구현이 아니라'.__ str __()'구현에'** kwargs'를 추가 할 수 있습니다. '.fancyStr()'와 같이 더 넓은 인터페이스를 가진 별도의 메소드를 사용하는 것을 고려하십시오; '.__ str __()'을 호출 할 수도 있습니다. – 9000
네,하지만'str (M, fancy = '+ fancy part')'같은 것을 사용할 수 있습니까? 말하자면'str (M) '을 호출 할 수는 있지만'kwarg'를 사용하기 위해서는 M.fancyStr (fancy ='... ')를 직접 사용해야합니다. – zezollo
개체의 속성을 기반으로 별도의 문자열을 렌더링하려는 경우 별도의 메서드를 사용합니다. 객체의 속성에 대해 신경 쓰지 않는다면 객체 문자열 밖에서 수행 할 것입니다. 아마도 장식 자 패턴을 사용하여, 아마도 일반 문자열 연결만으로도 가능할 것입니다.왜 모든 사람들이 당신의 구체적인 예에서'str()'을 기대하는 바를 바꾸고 싶은지 모르겠다. – chelmertz