๐ [Python] แแ ณแฏแ แ ขแแ ณ & แแ ฆแแ ฉแแ ณ แแ ตแทแแ ช - 2แแ ฎ
on
ํด๋์ค ์ฝ๋
๋ค์๊ณผ ๊ฐ์ด ํด๋์ค ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
class Car():
def __init__(self, company, details) -> None:
self._company = company
self._details = details
def __str__(self) -> str:
return f'str : {self._company} - {self._details}'
def __repr__(self) -> str:
return f'repr : {self._company} - {self._details}'
self
์ ์๋ฏธ
์ดํ, ๋ค์๊ณผ ๊ฐ์ด ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
car1 = Car("Ferrari", {'color': 'white', 'horsepower': 400, 'price': 8000})
car2 = Car("BMW", {'color': 'Black', 'horsepower':200, 'price': 3000})
car3 = Car("Audi", {'color': 'Silver', 'horsepower': 300, 'price': 8000})
ํด๋์ค ์ฝ๋์์ ๊ฐ ๋ฉ์๋๋ง๋ค ์ธ์๋ก self
๋ฅผ ์
๋ ฅ ๋ฐ์์ผ, ํ์ฌ ์ธ์คํด์ค๊ฐ ๋ฌด์์ธ์ง ์ ์ฃผ ์์ต๋๋ค. ํ์ฌ ์ธ์คํด์ค ์ ๋ณด ์ฆ, self
๋ฅผ ๋ฐ์์ ๋ฉ์๋๋ฅผ ์คํ ํ๋ ๊ฒ์
๋๋ค.
์ด๋ฅผ ํ์ธ ์ค์ ๋ก ํ์ธ ํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ํด๋์ค ์์ ๋ฉ์๋๋ฅผ ์ถ๊ฐ ํด์ค๋๋ค.
def detail_info(self):
print(f"Current ID : {id(self)}")
print(f"Car Detail Info : {self._company} {self._details.get('price')}")
์ดํ ๋ค์๊ณผ ๊ฐ์ด id
๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
print(id(car1))
car1.detail_info()
# 4455768016
# Current ID : 4455768016
# Car Detail Info : Ferrari 8000
์ฆ, ์ธ์คํด์ค์ id
๊ฐ๊ณ ์ธ์คํด์ค์ self
๋ ๊ฐ์์ ํ์ธ ํ ์ ์์ต๋๋ค.
๋ํ, ์๋ฅผ ๋ค์ด __class__
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ์ธ์คํด์ค์ ํด๋์ค๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
print(car1.__class__, car2.__class__)
print(id(car1.__class__) , id(car2.__class__))
# <class '__main__.Car'> <class '__main__.Car'>
# 140311856751936 140311856751936
์ธ์คํด์ค๋ฅผ ๋ง๋๋ ์ํ์ธ ํด๋์ค ๋ํ ์ธ์คํด์ค ๊ฐ์ฒด์ด๊ณ ํด๋น ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋ ๊ฒ ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ธ์คํด์ค์ ์ํ์ธ ํด๋์ค๊ฐ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ธ์คํด์ค๋ฅผ ์ ์ธํ์ง ์๊ณ ํด๋์ค ๋ฐ๋ก ๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
Car.detail_info()
# TypeError: detail_info() missing 1 required positional argument: 'self'
์์ ๊ฐ์ด ์๋ฌ๊ฐ ๋จ๊ฒ ๋ฉ๋๋ค. ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ดํด ๋ณด๋ฉด self
๊ฐ ํ์ํ๋ค๊ณ ํฉ๋๋ค. ์ด๋ ๋น์ฐํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ์ธ ํ ๋, ์ธ์๋ก self
๋ฅผ ์ ์ธ ํ์์ง๋ ์ด๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฆ, self
๋ฅผ ๋๊ฒจ ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค๋ ๋ป์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ธ์คํด์ค๋ฅผ ๋๊ฒจ ์ฃผ๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅ ํฉ๋๋ค.
Car.detail_info(car1)
# Current ID : 4376506320
# Car Detail Info : Ferrari 8000
car1.detail_info()
# Current ID : 4376506320
# Car Detail Info : Ferrari 8000
์ด์ ์ ์ธ์คํด์ค๋ฅผ ๋ณ์์ ํ ๋น ํ, detail_info
๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๊ฒฐ๊ณผ ์์ฒด๊ฐ ๋์ผํฉ๋๋ค. ์ด๋ ์ธ์คํด์ค์์ ๋ฉ์๋๋ฅผ ํธ์ถ ํ ๊ฒฝ์ฐ self
์ธ์๋ฅผ ์๋ ์ผ๋ก ๋๊ฒจ ์ฃผ๋ ๊ฒ์ด๊ณ Car.detail_info(car1)
๊ณผ ๊ฐ๋ ๋ฐฉ๋ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ช
์์ ์ผ๋ก ๋๊ฒจ์ค ์ฐจ์ด ์
๋๋ค.
ํด๋์ค ๋ณ์ ์ ์ธ
ํด๋์ค ๋ณ์๋ __init__
๋ฉ์๋์ ํด๋์ค ์ด๋ฆ ์ฌ์ด ๊ณต๊ฐ์ ์ ์ธ ํ๋ฉด ๋ฉ๋๋ค.
class Car():
# ํด๋์ค ๋ณ์
car_count = 0
def __init__(self, company, details) -> None:
self._company = company
self._details = details
์ดํ, __dict__
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ด๋ฅผ ์ถ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
car1.__dict__
# {'_company': 'Ferrari', '_details': {'color': 'white', 'horsepower': 400, 'price': 8000}}
ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด car_count
๋ฅผ ์ ๊ทผํ๋ฉด ๋ ์ ๊ทผ์ ๊ฐ๋ฅ ํฉ๋๋ค.
car1.car_count
# 0
ํด๋์ค ์์ ๋ค์์คํ์ด์ค ์์๋ ์กด์ฌ ํ์ง ์์ง๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํฉ๋๋ค. ์ฆ, __init__
๋ฉ์๋๊ฐ ํธ์ถ ๋ ๋ ๋ง๋ค car_count
๊ฐ ์ฆ๊ฐ ํ๋ ๊ฒ์
๋๋ค.
class Car():
# ํด๋์ค ๋ณ์
car_count = 0
def __init__(self, company, details) -> None:
self._company = company
self._details = details
Car.car_count += 1
์ด๋ ๊ฒ ์์ฑ ํ, ์ฝ๋๋ฅผ ์คํ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
car1 = Car("Ferrari", {'color': 'white', 'horsepower': 400, 'price': 8000})
car2 = Car("BMW", {'color': 'Black', 'horsepower':200, 'price': 3000})
car3 = Car("Audi", {'color': 'Silver', 'horsepower': 300, 'price': 8000})
print(car1.car_count)
# 3
์ฆ, ํด๋์ค ๋ณ์๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๊ฒ์
๋๋ค.
์ดํ, dir
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ธ์คํด์ค๋ฅผ ์ฐ์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
>>> dir(car1)
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_company', '_details', 'car_count', 'detail_info']
์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ดํด ๋ณด๋ฉด car_count
๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค. ์ฆ, __dict__
๋ ์ธ์คํด์ค ๋ง์ ๋ณ์๋ง ์ถ๋ ฅ ํ๋๊ฒ์ด๊ณ , dir
๋ ํด๋์ค ๊ฐ ๊ณต์ ํ๋ ๋ณ์, ์์๋ฐ์ ๋ณ์, ์ธ์คํด์ค ๋ด๋ถ ๋ณ์ ๋ชจ๋ ์ถ๋ ฅํ๋ ๊ฒ์
๋๋ค.
๋๋ฌธ์ ๋ด๋ถ ๋ณ์๋ฅผ ํ์ธ ํ๊ธฐ ์ํด์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ dir
๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ธ์คํด์ค ๋ณ์์ ํด๋์ค ๋ณ์๋ฅผ ๊ตฌ๋ถ ํ ์ ์๊ธฐ ๋๋ฌธ์ _company
์ ๊ฐ์ด _
๋ฅผ ์ฌ์ฉํด์ ๊ตฌ๋ถ ํ๋ ๊ฒ์
๋๋ค.