Class
- 그 클래스.
붕어빵틀 이면서
자동차 설계도 등. - 아무튼 속성이랑 메서드를
포함하는 전체.
python class
basic includes
기본적으로 만들면
포함하고있는 것들이 있는데1 2 3 4
class temp: a = None print(dir(temp))
1 2 3 4 5 6
['__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__', 'a']
a는 직접 쓴거니까 제외하고 저런게 있음.
위는 오다가다 볼 내용들이니 넘기고
기본적인 명세와 사용은 이렇다.1 2 3 4 5 6 7 8 9 10 11 12
class Unit: name = "" hp = 0 def __init__(self, name, hp): self.name = name self.hp = hp def print_info(self): print("Name:", self.name) print("HP:", self.hp) unit1 = Unit("marine", "120") unit1.print_info()
new instance
- 인스턴스 생성은
var = ClassName(args) - new 키워드가 안붙음.
self
- 자신 class를 말하고
instance화 했을 떄
자기 자신의 주소를 갖는다고?
하면 this랑 비슷한듯. - class안 method의
첫번째 parameter로 항상 들어옴.
써주기만하고 실제로 전달받지는 않음. 다만, method에서 field로
접근이 필요없다면
self는 parameter에서 생략 가능.
위 같은 경우def print_info(self):
에서 self를 뻈을 때name,hp로
접근이 안됨- 아무튼 그렇다는데 자주보이니
아직 확실치는 않아도
익숙해지것지.
Constructor
- 생성자. 위에도 씀.
__init__로 예약됨.- 없어도 상관없긴함. 원래 알던 비슷한 이유일듯.
좀 특이한점이 있는데 overload가 안됨.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
class asdf: a = '' b = '' c = '' def __init__(self): self.a = 1 self.b = 2 self.c = 3 def __init__(self, a, b, c): self.a = a self.b = b self.c = c def __init__(self, a, b, c, d): self.a = a self.b = b self.c = c self.d = d a2 = asdf() a1 = asdf('a','b','c') print()
이 경우 문제가 되는데
1 2
TypeError: __init__() missing 4 required positional arguments: 'a', 'b', 'c', and 'd'
라고 한다.
__init__는 마지막에 쓴거만 쓰나봄.
Member variable
- 위에 쓴 name, hp를 말함.
class에 속한 변수들.
무친기능 1
위에는 name, hp를
명시했는데 없어도 됨1 2 3 4 5 6 7 8 9 10
class Unit: def __init__(self, name, hp): self.name = name self.hp = hp def print_info(self): print("Name:", self.name) print("HP:", self.hp) unit1 = Unit("marine", "120") unit1.print_info()
똑같은 동작을 하는데
1 2 3 4 5 6 7 8
print(dir(unit1)) ['__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__', 'hp', 'name', 'print_info']
dir을 보면 쓰지 않았던 hp, name을 갖고 있다.
init에 써줘서 알아서 해주나봄.
근데 init에서 해주는것보다 그 전에 명시해주는게
보기 좋지 않을까? 아무튼.
무친기능 2
위 예제에 이걸 더한다.
1 2 3 4 5 6 7 8
unit2 = Unit("firebat", "120") unit2.print_info() unit1.range = 30 print ("unit1 Range:", unit1.range) print ("unit2 Range:", unit2.range)
unti1에 range라는 속성이 하나 더 생김.
unit2에는 안생김. 세상에
Member variable share
같은 class끼리
멤버공유가 가능한데
Unit class를 예로들어1 2 3 4 5 6 7 8 9 10 11 12 13
class Unit: def __init__(self, name, hp): self.name = name Unit.hp = hp def print_info(self): print("Name:", self.name) print("HP:", self.hp) u1 = Unit("전사", 100) u1.print_info() u2 = Unit("마법사", 200) u1.print_info() u2.print_info()
1 2 3 4 5 6
Name: 전사 HP: 100 Name: 전사 HP: 200 Name: 마법사 HP: 200
- 전사hp의 경우 마법사에서 바꾼 hp를 따라감.
class.member로 써서 나타냄.
- 일반적으로 쓰는걸 instance variable,
공유가능한걸 class variable 라고 함. - class variable에 접근시
classname.variabe를 권장하는데
self를 해도 상관없는것같긴하다.
Method
- 기능담당.
- 위에 쓰는것처럼.
- 이 전에 따로 썼으니 패스
Comments powered by Disqus.