i가 아니라 j
예를 들면 1+3j
이런 식으로 표현한다.
영어 알파벳
과 숫자
, 그리고 underscore
로만 구성def to_lowercase(input):
return input.lower()
name = "Eric Idle"
f"{to_lowercase(name)} is funny."
eric idle is funny.
class Comedian:
def __init__(self, first_name, last_name, age):
self.first_name = first_name
self.last_name = last_name
self.age = age
def __str__(self)
return f"{self.first_name} {self.last_name} is {self.age}."
def __repr__(self):
return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"
>>> new_comedian = Comedian("Eric", "Idle", 74)
>>> new_comedian
Eric Idle is 74. Surprise!
>>> f"{new_comedian}"
'Eric Idle is 74.' # (f-string 호출 시 str 형태로 반환되는 것 확인 가능)
>>> f"{new_comedian!r}"
'Eric Idle is 74. Surprise!' # (f-string 호출 시 str 형태로 반환되는 것 확인 가능)
__str__
, __repr__
위에서 f-string 학습 중 의문이 든 것이 new_comedian을 호출하면 왜 __str__
이 아닌 __repr__
가 작동되는가였다. 의문은 아래 설명으로 풀렸다.
The
__str__()
and__repr__()
methods deal with how objects are presented as strings, so you’ll need to make sure you include at least one of those methods in your class definition. If you have to pick one, go with__repr__()
because it can be used in place of__str__()
.The string returned by
__str__()
is the informal string representation of an object and should be readable. The string returned by__repr__()
is the official representation and should be unambiguous. Calling str() and repr() is preferable to using__str__()
and__repr__()
directly.By default, f-strings will use
__str__()
, but you can make sure they use__repr__()
if you include the conversion flag !r.reference: https://realpython.com/python-f-strings/
+)
__str__
과 __repr__
은 객체를 사용자가 이해할 수 있는 문자열로 반환하는 함수.
str()
은 입력받은 객체의 문자열 버전을 반환하는 함수.
(내가 몰랐던 사실: str
은 사실 내장 함수가 아니라 파이썬의 기본 내장 클래스. str(3)
이라는 것은, 내장 함수 str을 실행하는 것이 아니라, 내장 str 클래스의 생성자 메소드를 실행하고 그 인자로 3을 주는 것과 같다.
str이 클래스라는 것은help(str)
로 확인 가능.)
파이썬에는 내장된 많은 자료형들에, 해당하는 자료형에 대한 연산을 정의하는 메소드들이 있다. 그 메소드들은 메소드의 이름 앞뒤에 ‘__‘(double underscore)를 지니고 있다.
repr은 representation
의 약자로, 어떤 객체의 본질보다는 외부에 노출되는 즉 사용자가 이해할 수 있는 객체의 모습을 표현한다. repr함수는 어떤 객체의 출력될 수 있는 표현을 문자열의 형태로 반환한다.
__str__
이나 __repr__
이나 객체의 문자열 표현을 반환한다는 점은 공통이다.
__str__
의 본질적인 목적은 객체를 '표현'하는 것보다는 추가적인 객체의 가공이나 다른 데이터와 호환될 수 있도록 문자열화(평문화)하는 것에 있다. 다른 자료형 간에 인터페이스를 제공하기 위해 존재하는 것.
__repr__
의 본질적인 목적은 해당 객체를 인간이 이해할 수 있는 표현으로 나타내기 위함이다.
__str__
을 정의하지 않을 경우, __repr__
이 대신 쓰일 수 있다.
reference:
https://shoark7.github.io/programming/python/difference-between-__repr__-vs-__str__
()
--> **
--> *, /, %
--> +. -