print()를 사용하여 클래스의 인스턴스를 인쇄하려면 어떻게 해야 합니까?
print
클래스의 인스턴스는 다음과 같은 출력을 얻을 수 있습니다.
>>> class Test():
... def __init__(self):
... self.a = 'foo'
...
>>> print(Test())
<__main__.Test object at 0x7fc9a9e36d60>
클래스 및 해당 인스턴스의 인쇄 동작(또는 문자열 표현)을 정의하려면 어떻게 해야 합니까?예를 들어, 위의 코드를 참조할 때, 어떻게 수정하면Test
class so so so so so so so so so soprint
는 ""를 .a
가치, 가치, 가치
>>> class Test:
... def __repr__(self):
... return "Test()"
... def __str__(self):
... return "member of Test"
...
>>> t = Test()
>>> t
Test()
>>> print(t)
member of Test
메서드는 인쇄 시 발생하는 현상이고 메서드는 함수를 사용할 때(또는 인터랙티브프롬프트로 확인할 때) 발생하는 현상입니다.
'아니오'의 경우__str__
은 Python의 합니다.__repr__
「 」를 하면, 「 」__str__
아니다__repr__
의 Python을 __repr__
, 「」를 하고 있습니다__str__
인쇄를 위해.
Chris Lutz의 설명에 따르면 이는__repr__
방법을 가르쳐 주세요.
의 매뉴얼에 기재되어 있습니다.
이 는 " "에 되었을 때 합니다.
eval()
그 이외의 경우는 오브젝트 타입의 이름과 대부분의 경우 오브젝트의 이름 및 주소를 포함한 추가 정보를 포함하는 꺽쇠 괄호로 둘러싸인 문자열은 문자열입니다.는 이 할 수 이 경우 클래스는 이 함수의 반환 내용을 합니다.__repr__()
★★★★★★ 。
다음 클래스의 테스트:
class Test:
def __init__(self, a, b):
self.a = a
self.b = b
def __repr__(self):
return f"<Test a:{self.a} b:{self.b}>"
def __str__(self):
return f"From str method of Test: a is {self.a}, b is {self.b}"
..Python 쉘에서는 다음과 같이 동작합니다.
>>> t = Test(123, 456)
>>> t
<Test a:123 b:456>
>>> print(repr(t))
<Test a:123 b:456>
>>> print(t)
From str method of Test: a is 123, b is 456
>>> print(str(t))
From str method of Test: a is 123, b is 456
'아니오'의 경우__str__
정의되어 있습니다.print(t)
(오류)print(str(t))
합니다.__repr__
대신에
'아니오'의 경우__repr__
method가 정의되고 기본값이 사용됩니다.이것은 대략 다음과 같습니다.
def __repr__(self):
cls = self.__class__
return f"<{cls.__module_}.{cls.__qualname__} object at {id(self)}>"
특정 포맷 없이 모든 클래스에 적용할 수 있는 일반적인 방법은 다음과 같습니다.
class Element:
def __init__(self, name, symbol, number):
self.name = name
self.symbol = symbol
self.number = number
def __str__(self):
return str(self.__class__) + ": " + str(self.__dict__)
그리고 나서.
elem = Element('my_name', 'some_symbol', 3)
print(elem)
생산하다
__main__.Element: {'symbol': 'some_symbol', 'name': 'my_name', 'number': 3}
@Keith와 같은 상황이라면 다음을 시도해 볼 수 있습니다.
print(a.__dict__)
이것은 내가 생각하는 좋은 스타일에 반하는 것이지만, 만약 당신이 디버깅을 하려고 한다면 그것은 당신이 원하는 것을 할 것이다.
@user394430에 의한 응답의 보다 예쁜 버전
class Element:
def __init__(self, name, symbol, number):
self.name = name
self.symbol = symbol
self.number = number
def __str__(self):
return str(self.__class__) + '\n'+ '\n'.join(('{} = {}'.format(item, self.__dict__[item]) for item in self.__dict__))
elem = Element('my_name', 'some_symbol', 3)
print(elem)
이름과 값의 좋은 목록을 시각적으로 생성합니다.
<class '__main__.Element'>
name = my_name
symbol = some_symbol
number = 3
보다 고급 버전(Thanks Ruud)은 다음 항목을 정렬합니다.
def __str__(self):
return str(self.__class__) + '\n' + '\n'.join((str(item) + ' = ' + str(self.__dict__[item]) for item in sorted(self.__dict__)))
Python 3의 경우:
특정 형식이 중요하지 않은 경우(디버깅 등) 아래의 인쇄 가능 클래스에서 상속하십시오.모든 객체에 코드를 쓸 필요가 없습니다.
이 답변에 영감을 받아
class Printable:
def __repr__(self):
from pprint import pformat
return "<" + type(self).__name__ + "> " + pformat(vars(self), indent=4, width=1)
# Example Usage
class MyClass(Printable):
pass
my_obj = MyClass()
my_obj.msg = "Hello"
my_obj.number = "46"
print(my_obj)
@dbr의 답변에 제 의견을 덧붙이자면, 그가 인용한 공식 문서에서 이 문장을 구현하는 예를 다음에 제시하겠습니다.
"[...] - eval로 전달될 때 동일한 값의 개체를 생성하는 문자열을 반환합니다. [...]
이 클래스 정의 지정:
class Test(object):
def __init__(self, a, b):
self._a = a
self._b = b
def __str__(self):
return "An instance of class Test with state: a=%s b=%s" % (self._a, self._b)
def __repr__(self):
return 'Test("%s","%s")' % (self._a, self._b)
이제 의 인스턴스를 쉽게 시리얼화할 수 있습니다.Test
클래스:
x = Test('hello', 'world')
print 'Human readable: ', str(x)
print 'Object representation: ', repr(x)
print
y = eval(repr(x))
print 'Human readable: ', str(y)
print 'Object representation: ', repr(y)
print
마지막 코드를 실행하면 다음과 같은 결과가 나옵니다.
Human readable: An instance of class Test with state: a=hello b=world
Object representation: Test("hello","world")
Human readable: An instance of class Test with state: a=hello b=world
Object representation: Test("hello","world")
하지만 마지막 코멘트에서 말씀드렸듯이, 더 많은 정보가 여기에 있습니다.
간단해, 인쇄물에서는, 다음과 같이 해.
print(foobar.__dict__)
건설자가 있는 한
__init__
를 사용해야 합니다.__repr__
이것은 다음과 같은 표준 함수입니다.__init__
. 예:
class Foobar():
"""This will create Foobar type object."""
def __init__(self):
print "Foobar object is created."
def __repr__(self):
return "Type what do you want to see here."
a = Foobar()
print a
__repr__
그리고.__str__
이미 많은 답변에 언급되어 있습니다.만약 당신이 귀찮아서 이 마법 기능을 수업에 추가할 수 없다면 objprint를 사용해도 된다는 것을 덧붙이고 싶습니다.심플한 데코레이터@add_objprint
추가에 도움이 됩니다.__str__
method to your class, 그리고 당신은 사용할 수 있습니다.print
예를 들어.물론 괜찮으시다면,objprint
임의의 오브젝트를 사람이 읽을 수 있는 형식으로 인쇄합니다.
from objprint import add_objprint
class Position:
def __init__(self, x, y):
self.x = x
self.y = y
@add_objprint
class Player:
def __init__(self):
self.name = "Alice"
self.age = 18
self.items = ["axe", "armor"]
self.coins = {"gold": 1, "silver": 33, "bronze": 57}
self.position = Position(3, 5)
print(Player())
출력은 다음과 같습니다.
<Player
.name = 'Alice',
.age = 18,
.items = ['axe', 'armor'],
.coins = {'gold': 1, 'silver': 33, 'bronze': 57},
.position = <Position
.x = 3,
.y = 5
>
>
이 스레드에는 이미 많은 해답이 있지만 특별히 도움이 되는 것은 없고, 스스로 풀어야 했기 때문에 조금 더 도움이 되었으면 합니다.
수업이 끝날 때 괄호가 있는지 확인만 하면 됩니다. 예:
print(class())
다음은 제가 작업하던 프로젝트의 코드 예입니다.
class Element:
def __init__(self, name, symbol, number):
self.name = name
self.symbol = symbol
self.number = number
def __str__(self):
return "{}: {}\nAtomic Number: {}\n".format(self.name, self.symbol, self.number
class Hydrogen(Element):
def __init__(self):
super().__init__(name = "Hydrogen", symbol = "H", number = "1")
수소 클래스를 인쇄하기 위해 다음을 사용했습니다.
print(Hydrogen())
이 작업은 Hydrogen 끝에 괄호가 없으면 작동하지 않습니다.그들은 필요하다.
도움이 되길 바라며, 더 궁금한 점이 있으면 알려주세요.
이것은 오래된 투고이지만, 데이터 클래스(Python 3.7)에 도입된 매우 편리한 방법도 있습니다.기타 특수 기능(예:__eq__
그리고.__hash__
, 이 기능을 제공합니다.__repr__
클래스 속성의 함수.예를 들면 다음과 같습니다.
from dataclasses import dataclass, field
@dataclass
class Test:
a: str = field(default="foo")
b: str = field(default="bar")
t = Test()
print(t)
# prints Test(a='foo', b='bar')
특정 속성이 출력되지 않도록 숨기려면 필드 데코레이터 매개 변수를 설정할 수 있습니다.repr
로.False
:
@dataclass
class Test:
a: str = field(default="foo")
b: str = field(default="bar", repr=False)
t = Test()
print(t)
# prints Test(a='foo')
언급URL : https://stackoverflow.com/questions/1535327/how-to-print-instances-of-a-class-using-print
'programing' 카테고리의 다른 글
두 날짜의 차이(초) (0) | 2023.01.22 |
---|---|
Express에서 POST 양식 필드에 액세스하는 방법 (0) | 2023.01.22 |
Python에서 모듈 전체 변수를 만드는 방법은 무엇입니까? (0) | 2023.01.22 |
드롭다운에 React JS를 사용한 OnChange 이벤트 (0) | 2023.01.22 |
Maven 빌드 실패: "Javac 컴파일러를 찾을 수 없음: jre 또는 jdk 문제" (0) | 2023.01.22 |