220307

박찬웅·2022년 3월 7일
0

공부

목록 보기
7/12

인프런 Python 100 문제풀이 part.3

오늘 배운것

  • 클래스 사용
  • self (셀프인자)
  • 생성자 메서드 'init'

강의는 예제로 변수에 값을 할당하고, 출력하는 것으로 시작해서 -> 리스트를 사용한 출력 -> 간단한 함수를 추가하여 변수 정의 -> 클래스 사용 순으로 진행이 되었다.

클래스는 객체지향을 위해 사용되는 하나의 보따리나 작은 라이브러리 쯤으로 와닿았다.
클래스 내부엔 메서드라 불리는 함수와 데이터들로 구성되어있다.

class = method + data

클래스를 사용하면 내부의 기능이나 데이터를 추가시켜 확장시킬수 도 있고, 또다른 클래스를 참조하는 부모 자식관계의 '상속'이라는 개념도 있다고 한다.

# OOP1

# Object Oriented Programming

강의: 인프런 파이썬 예제100

#클래스 강의1 : 변수와 리스트를 사용하여 캐릭터 정보를 출력하기

```python
#[1] : 변수

print(’[변수를 사용한 캐릭터 정보 출력]’)

person1_name = ‘홍길동’

person1_age = 20

person1_power = 7 # —-파워는 1~9사이에서 랜덤생성

print(f’귀하가 선택하신 {person1_name} 캐릭터의 나이는 {person1_age}살이고 파워는 레벨 {person1_power} 입니다.’)

print(’-’*140)
💡 다른 person에 대해 출력하려면 매번 비슷비슷한 코드를 똑같이 출력해야한다. person 속성값의 리스트를 작성해보자
#[2]: 리스트 또는 딕셔너리

#딕셔너리 타입을 사용하면 리스트 보다는 더 체계적으로 데이터 핸들링이 가능하다.

person1 = [’홍길동', 20, 7]

person2 = [’이순신', 30, 9]

print(f’귀하가 선택하신 {person1[0]} 캐릭터의 나이는 {person1[1]}살이고 파워는 레벨 {person1[2} 입니다.)

print(f’귀하가 선택하신 {person2[0]} 캐릭터의 나이는 {person2[1]}살이고 파워는 레벨 {person2[2} 입니다.)

print(-*140)

리스트의 사용으로 데이터의 저장, 관리가 쉬워짐

#[3]: 각 캐릭터의 파워 레벨을 랜덤으로 정해줘야 한다면? -> 함수사용

print('[함수와 리스트를 사용한 캐릭터 정보 출력]')
#-------------------------
import random

def add_power_level(c_id):
	c_id[2] = random.choice([1,2,3,4,5,6,7,8,9])
	return c_id
#-------------------------

print('함수 호출전-->', person1, person2) #--함수호출전--;;
print('함수 호출후-->', add_power_level(person1), add_power_level(person2)) #--함수호출--;;

함수를 사용하여 랜덤 powerlevel 을 부여했다.

#[4]: 클래스 생성
# 클래스를 사용하면 변수와 함수를 하나로 묶어 데이터를 효율적이면서 체계적으로 핸들링할 수 있다.
# 클래스 내부에서 여러 다양한 변수나 함수가 정의되고 사용되는데 이들을 --> '클래스 멤버' 라고함
# 대표적인 클래스 멤버 --> 변수, 메서드(함수. 행위나 동작을 구현)

#클래스 작성
# (1) 클래스 작성 --> class 키워드로 선언하고 클래스명 지정
# (2) 클래스 이름 --> 관례적으로 CamelCase 나 camel_case 사용 --> 파이썬은 보통 단어 사이에 _를 넣는 편이나 클래스명은 카멜케이스를 따른다.
# (3) 함수가 아니기 때문에 클래스명 뒤에 ()괄호를 하지 않고 바로 콜론(:)을 붙여 종료한다.
# (4) 클래스 선언과 클래스명만 지정하고 바디는 pass 설정만 해놓아도 하나의 클래스가 만들어진다! --> pass는 테스트 용도로 많이 쓰임
class Empty:
    pass # 클래스 내에 아무것도 없으면 에러
#--------------------------

클래스내부에 person 데이터, 메소드(함수)를 포함시켜 체계적인 모음집으로 만들 수 있다. 또한 클래스 내부에 기능이나 데이터를 추가시켜 확장시킬 수도 있고, 다른 클래스를 참조하는 ‘상속’이라는 개념도 있다.

#[5] : 클래스 사용 --> 클래스 객체를 생성 --> 그것을 변수에 할당
# PersonInfo 클래스의 인스턴스 객체를 생성 :클래스에 인스턴스를 채운다!
# 클래스 내부 메소드를 만드는 것과 클래스 밖에서 함수를 생성하는것에 다른점: self 인자 
#------------------------------------
class PersonInfo:
    def hello(self):
        print('안녕하세요~ ^_^')
# p.hello 하면 출력이 될까? 지금은 안된다 (def hello():). 하지만 방법은 맞다.
# positional argument가 없다고 나옴
# def hello(self): 로 바꿔주면된다! p가 self인자로 들어가 메서드를 동작시킬 수 있다.
#------------------------------------
p = PersonInfo()
print(p, type(p))

a= [2,6,3,1,4]
# 위 리스트를 a 라는 변수에 할당하면 a는 리스트 클래스가 된다. a 라는 리스트객체!

# 객체 뒤에 . 을 찍으면 그 인스턴스 객체에 어떤 동작을 하겠다는 것
# 
print(a, type(a))
a.sort()
print(a)

클래스 내부의 메서드엔 (self)를 꼭 붙여주도록 한다.

인스턴스 자신, 메소드 임의의 인수

💡 문제 : 이름과 나이를 전달받아 객체를 생성하는 Person 클래스를 만들고 객체 정보를 출력하시오.
# 정보를 생성하는 메서드명 -> create_info()
# 정보를 출력하는 메서드명 -> print_info()

print('[클래스를 사용한 캐릭터 생성 및 정보 출력]')
#------------------------------------------------------
class Person:

    def create_info(self, name, age):
        self.name = name
        self.age = age
    
    def print_info(self):
        print('-'*50 + '\n' )
        print('Name:', self.name)
        print('Age:', self.age)
        print('-'*50)

#------------------------------------------------------
p1 = Person()
p1.create_info('박찬웅', 25)
p1.print_info()

p2 = Person()
p2.create_info('김밥천국', 21)
p2.print_info()

함수내 메서드를 불러올때 맨 처음 self는 채우는 인자가 아님.

split()

strip()

💡 문제 생성자 메서드란 무엇인가 자바와 다르게 구현이 되어지는 파이썬 클래스의 생성자 메서드
#[1]: 클래스 생성
#------------------------------------------------------
class Person:
    #생성자: 객체가 클래스로부터 만들어질떄 자동으로 호출이 되는 메서드
    def __init__(self):
        print('객체가 하나 생성되었습니다.')
        # 객체의 초기값 설정용도
        # Person() 클래스 내에 내가 만든 메서드가 한개도 없어도 객체를 생성하는 순간 생성자 메서드는 제일 먼저 호출된다.
#------------------------------------------------------

#[!]: __init__ 생성자 메서드란?
# 생성자 메서드를 통해서 객체가 생성될 때 해당 객체의 여러 초기 값을 세팅할 수 있다.
# 다양한 객체를 생성해낼 때 이 생성자를 이용하며, 각 개체의 초기 값들을 설정하면서 여러 객체를 만들어낸다.
# 생성자나 소멸자와 같이 앞뒤에 '__' 가 붙은 경우, 특별한 용도로 사용되는 메서드라는 뜻
# __스페셜메서드__

이번엔 생성자 메서드를 사용해서 Person()클래스를 구현해보자

#------------------------------------------------------
class Person:

    def __init__(self):
        self.name = input('Name:')
        self.age = input('Age: ')
    
    def print_info(self):
        print('-'*50 + '\n' )
        print('Name:', self.name)
        print('Age:', self.age)
        print('-'*50)
#------------------------------------------------------
# 이렇게 아무 인자 없이 인스턴스 생성 후 입력하는 방식도 가능
#혹은

#------------------------------------------------------
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def print_info(self):
        print('-'*50 + '\n' )
        print('Name:', self.name)
        print('Age:', self.age)
        print('-'*50)
#------------------------------------------------------

# p1= Person(박찬웅, 25) 와 같이 인스턴스 생성시에 아예 인자를 할당할 수도 있다.


### 주요 사항

- class, 변수, 메서드
- self, 인자
- 생성자 메서드 ‘__**init__’**
profile
기록장

0개의 댓글