#2.1 init
class Player: def __init__(self, name, xp): # self는 class의 intance를 가리킴 # class안의 method를 정의할 때 사용하던 말던 항상 self 써줘야 함 self.name = name self.xp = xp nico = Player('nico',1000) print(nico.name,nico.xp)
- 파이썬은 constructor 안 쓰고 init 사용함
#2.2 Inheritance
class Human: def __init__(self, name): self.name = name def say_hello(self): print(f"hello my name is {self.name}") class Player(Human): def __init__(self, name, xp): # self는 class의 intance를 가리킴 self.xp = xp class Fan(Human): def __init__ (self, name, fav_team): self.fav_team = fav_team nico_player = Player('nico',10) nico_player.say_hello() nico_fan = Fan('nico_fan','dontknow') nico_fan.say_hello()
다음과 같은 에러가 발생하는 이유는?
→ name을 Player, Fan class에서 사용하지 않기 때문
→ 우리가 실질적으로 상속받은 class인 Human에 대한 intialize를 하지 않았기 때문에 name에 대한 정의가 안 되어 있다~ 이런느낌
#2.3 super()
class Human: def __init__(self, name): self.name = name def say_hello(self): print(f"hello my name is {self.name}") class Player(Human): def __init__(self, name, xp): # self는 class의 intance를 가리킴 super().__init__(name) #super클래스의 __init__을 호출해 name 정의함 self.xp = xp class Fan(Human): def __init__ (self, name, fav_team): super().__init__(name) self.fav_team = fav_team nico_player = Player('nico',10) nico_player.say_hello() nico_fan = Fan('nico_fan','dontknow') nico_fan.say_hello()
- 이런 식으로 상속받은 class안에 super class의 init을 호출해 name을 정의함으로써 name 사용 가능
#2.4 Recap
- class안에 init 이 필수는 아님!!
- init__말고 다른 것도 있음 바로 __str_ !!! 장고에서 많이 씀
- underscore 메서드: init, str, … 등등 짱마늠
#2.5 dir
- str 은 메서드가 리턴하는게 무엇이든 문자열로 보여짐
class Dog: def __init__(self, name): self.name = name def __str__(self): print(super().__str__()) return f"Dog: {self.name}" jia = Dog("jia") print(jia) paul = Dog("paul") print(paul)
<출력결과>
class Dog: def __init__(self, name): self.name = name def __str__(self): print(super().__str__()) return f"Dog: {self.name}" jia = Dog("jia") print(dir(jia))
<출력결과>
- dir(디렉토리)는 클래스의 속성들과 메서드들을 볼 수 있게 해줌
from typing import Any class Dog: def __init__(self, name): self.name = name def __str__(self): print(super().__str__()) return f"Dog: {self.name}" def __getattribute__(self, name): print(f"they want to get {name}") return "👻" jia = Dog("jia") print(jia.name)
<출력결과>
'Backend > Django' 카테고리의 다른 글
[백엔드][장고][Django] Chapter #6 (0) | 2023.07.15 |
---|---|
[백엔드][장고][Django] Chapter #5 (0) | 2023.07.13 |
[백엔드][장고][Django] Chapter #4 (0) | 2023.07.13 |
[백엔드][장고][Django] Chapter #3 (0) | 2023.07.13 |
[백엔드][장고][Django] Chapter #1 (0) | 2023.07.13 |
Uploaded by Notion2Tistory v1.1.0