Python - 객체를 문자열(string)로 변환

객체를 string 타입의 변수로 변환하는 방법, 객체를 문자열로 출력하는 방법을 소개합니다.

1. str()으로 객체를 문자열로 변환

아래 변수들은 모두 1을 의미하지만, 타입이 모두 다릅니다. 일반적으로 사용할 때는 문제가 없지만, 어떤 상황에서 인자로 string 타입만 사용될 때, 타입을 변환하지 않으면 runtime에 에러가 발생할 수도 있습니다.

a = '1'
b = 1
c = 1.0

print(a, ":", type(a))
print(b, ":", type(b))
print(c, ":", type(c))

Output:

1 : <class 'str'>
1 : <class 'int'>
1.0 : <class 'float'>

아래와 같이 str()을 사용하여 객체를 문자열로 변환할 수 있습니다. 이 함수는 인자로 전달된 객체를 문자열 변환하여 리턴합니다.

b = 1
c = 1.0
d = str(b)
e = str(c)

print(d, ":", type(d))
print(e, ":", type(e))

Output:

1 : <class 'str'>
1.0 : <class 'str'>

1.1 list, tuple, dict

리스트 같은 객체도, str()으로 문자열로 변환할 수 있습니다. print()로 출력해서 보면 리스트나 문자열이나 차이가 없어보이지만, 다른 타입의 객체입니다.

my_list = [1, 2, 3, 4, 5]

print(my_list)
print(type(my_list))

str_list = str(my_list)
print(str_list)
print(type(str_list))

Output:

[1, 2, 3, 4, 5]
<class 'list'>
[1, 2, 3, 4, 5]
<class 'str'>

튜플이나, 딕셔너리도 str()로 문자열 변환이 가능합니다.

my_tuple = (1, 2, 3, 4, 5)
str_list = str(my_tuple)
print(str_list)
print(type(str_list))

my_dict = {1: 'a', 2: 'b', 3: 'c'}
str_dict = str(my_dict)
print(str_dict)
print(type(str_dict))

Output:

(1, 2, 3, 4, 5)
<class 'str'>
{1: 'a', 2: 'b', 3: 'c'}
<class 'str'>

2. f-string으로 문자열 변환

다른 문자열과 객체의 내용을 함께 문자열로 변환할 때 f-string을 사용할 수 있습니다.

아래 예제는 문자열 사이에 객체의 내용을 추가하여 새로운 문자열로 만듭니다.

my_tuple = (1, 2, 3)
my_dict = {1: 'a', 2: 'b', 3: 'c'}

s = f"Tuple is {my_tuple} and Dictionary is {my_dict}"
print(s)

Output:

Tuple is (1, 2, 3) and Dictionary is {1: 'a', 2: 'b', 3: 'c'}

3. __str__()로 객체의 내용을 문자열로 출력

아래 예제는 Person 클래스를 정의 및 객체를 생성하였고, print()로 객체를 출력하였습니다.

그런데 결과를 보면, 의미를 갖기 어려운 객체의 주소 값이 출력됩니다.

class Person:
    def __init__(self, name) -> None:
        self.name = name

p = Person("John")
print(p, " ", type(p))

Output:

<__main__.Person object at 0x7f19e9b70e50>   <class '__main__.Person'>

만약 Java의 toString() 처럼, 디버깅 등의 목적으로 객체의 주요 정보를 출력하고 싶다면 파이썬에서는 __str__()를 이용할 수 있습니다.

아래와 같이 클래스에 __str__()를 구현하여 원하는 정보를 문자열로 만들어 리턴하도록 구현합니다. 실제로 객체가 출력될 때 이 문자열이 출력됩니다.

class Person:
    def __init__(self, name) -> None:
        self.name = name

    def __str__(self) -> str:
        return f"[Person name = {self.name}]"

p = Person("John")
print(p, " ", type(p))

Output:

[Person name = John]   <class '__main__.Person'>
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha