class()
class 에는 객체의 구조와 동작을 정의한다.
python에서는 class의 네이밍컨벤션을 UpperCamel case = Pascal로 작성한다.
대충 적어보는 class 예문
class Personal(): #1
def __init__(self, name, animal): #name, animals 이런것은 속성
self.name = name
self.animal = animal
class People(): #2
def info(self, name, animal):
만약 이렇게 두 개의 class가 있다고 하자
class 각각은서로 안에 들어있는 변수, 함수의 영향을 받지 않는다.
특히, class 내에서 정의된 변수는 이 안에서만 유효하게 작동한다.
이것을 네임 스페이스라고 하는데, 네임스페이스를 활용해 전역 변수와 지역 변수를 지정할 수 있고,
전역변수는 ___.globals() 혹은 global ___ 로 지정이 가능하다.
(내가 코딩하고자하는 방법에서는 아마 id name을 전역변수로 지정해주어야하지 않을까..)
지역변수는 class내에서만 함수가 작동하기 때문에 다른 코드에 영향이 적다.
self 는 클래스에 의해 만들어진 객체, 자기 자신(class)를 의미하며 호출 시 객체 자신이 전달된다.
함수 내에서는 self로 부르고,
함수 바깥에서 호출하고자 할 때는 Personal.__init__() 코드로 호출할 수 있다.
그리고, 다른 class 에 있는 함수를 또 다른class에 호출하고 싶은 경우,
방법1. class인스턴스를 만들고 .call_function()을 사용해 호출할 수 있다.
방법2. 클래스이름.함수() 로도 가능한 듯.
> 가능하다면 둘다 써보자.
__init__
아직 이해가 덜 되어 공부가 더 필요한 요소인데,
생성자 라고 부르나보다.
class를 객체로 호출할때 자동으로 실행되는 함수라고 한다.
(__생성자__, __초기화자__, __숨김자.. 이게 뭘까…? 한참 공부해야겠다..)
따온 설명을 보자면..
- __init__ 메서드는 name = Personal()처럼 클래스에 ( )(괄호)를 붙여서 인스턴스를 만들 때 호출되는 특별한 메서드입니다. 즉, __init__(initialize)이라는 이름 그대로 인스턴스(객체)를 초기화합니다.
- 특히 이렇게 앞 뒤로 __(밑줄 두 개)가 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드인데 스페셜 메서드(special method) 또는 매직 메서드(magic method)라고 부릅니다. 앞으로 파이썬의 여러 가지 기능을 사용할 때 이 스페셜 메서드를 채우는 식으로 사용하게 됩니다.
그리고 class를 만드는 가장 큰 이유.. 상속
부모 class > 자식 class로 정의된 것을 상속 가능하다.
원하는 부분만 상속할 수도 있고,
오버라이딩으로 상속받은 속성을 자식요소에서 변경하기도 한다.
*슈퍼 함수(super()) : 부모 클래스 내 메서드를 자식 클래스에서 이용하면서 필요한 부분만 재정의하여 사용할 수 있게 해준다.
'super().[메서드 이름](매개변수)'로 사용
클래스 함수에 대한 이해는 공부해도 공부해도 부족한 것 같다.
코드 작성하면서 새로이 계속 공부하는 중이다..
절차지향과 객체지향
절차 지향은 일반적인 코딩과정이라 볼 수 있다.
객체 없이 변수를 생성하고 위에서부터 작성한 차례대로 출력한다.
지금까지 해온 단순한 코드들이 모두 절차지향이었다고 볼 수 있겠다.
1 2 3 … 100까지.
객체 지향은 각각의 객체가 값을 가지도록 코딩할 수있고
중복 코드를 묶어 코드를 한눈에 보기 좋게 단일화할 수 있다.
몬스터를 만들고, 몬스터 class를 받아서 불몬, 물몬, 전기몬 등을 만들 수 있는 것 = 이것이 상속!
+
random.choice - 랜덤으로 요소 하나를 뽑아줌.
random.sample - 랜덤으로 요소 여러 개 가져옴. 중복X
random.choices - 랜덤으로 요소 여러 개 가져옴. 중복O
그리고 발제에서의 몬스터 랜덤출몰을 위해 찾아본 random 함수..
한 마리 랜덤 출몰을 노리고 있으니 choice를 사용하면 되겠다.
만약 몬스터 종류가 많고 2~3마리의 몬스터를 나타내고 싶다면 choices로 중복이 있는 랜덤 콜을 하면 재밌을 듯.
느낀..점:
발제를 기준으로 코드를 작성하면서 구글링보다 스스로의 능력으로 작성하고싶다는 생각이 많이 들었다.
그리고 계속 이걸 왜 이렇게 쓰는걸까? 하는 부분이 굉장히 많다.
여전히 기초를 꾸준하게 쌓아야한다는 것이지..
하나씩 하나씩 설명할 수 있을만큼의 이해를 해나가자:)
조급쟁인거 알아서 매일 쓰는데, 진짜 조급해하지는 말자..!
주말 불태울줄 아는 시점에서 이미 최선을 다하고 있는 거고,
충분히 잘 배워나가고 있다.
스스로도 멋있다고 느끼고 있잖아?ㅋㅋ 잘하구 있다구
'AI 웹개발반' 카테고리의 다른 글
[TIL] 오늘의 학습 0330, 팀프 코딩 (0) | 2023.03.31 |
---|---|
[TIL] 게임 코드 작성기 feat.불안한 코드와 그걸 지켜보는 나 (0) | 2023.03.28 |
[TIL] 파이썬 : 연산자와 연산자 우선순위 (0) | 2023.03.27 |
[WIL]:02 2주차 병아리의 삶 (4) | 2023.03.26 |
[TIL] 예제 만들어 공부하기, 코딩 300제! (4) | 2023.03.23 |