파이썬/파이썬(python) 중급

[17-3 파이썬] 클래스 속성 만드는 방법

Olivia-BlackCherry 2022. 8. 24. 21:15

지난 시간 클래스를 만들어 보았다.
오늘은 클래스 속성은 어떻게 만드는지 알아보겠다.

클래스 속성을 만드는 가장 쉬운 방법은
만들어진 객체에 속성을 추가하는 것이다.
이렇게 하면 얼마든지 많은 속성을 추가할 수 있다.

객체.속성이름 = 속성값
class User:
	pass
    
user_1 = User()

user_1.id = "abc"
user_1.username = "olivia"

print(user_1.username)



그런데 만약 새로운 사용자를 만들 때마다
id와 username의 속성을 적어야 한다고 생각해봅시다.
같은 일을 계속 반복해야 합니다.

class User:
    pass


user_1 = User()
user_2 = User()
user_3 = User()


user_1.id = "001"
user_1.username = "olivia"

user_2.id = "002"
user_2.username = "olivia"

user_3.id = "003"
user_3.username = "olivia"


이런 경우에는 오타를 많이 내는 등
실수하기가 쉽다.
그리고 너무나도 비효율적이다.

그래서 나온 것이
생성자 개념이다.

같은 속성을 가지는 객체를 많이 만들 때
생성자를 이용하면 훨씬 더 빠르게 만들 수 있다.

생성자 constructor

1. 하는 일

constructor의 의미를 살펴보자.
construct는 무엇인가를 짓는다, 건축한다는 의미다.

constructor 생성자는
클래스를 구성한는 여러 속성들이다.

클래스가 만들어질 때
생성자도 만들어지는데,

생성자를 통해
이 클래스에서 앞으로 무슨 일이 일어나게 될지
예측할 수 있다.

또 초기화의 역할도 한다.( =initialize)
클래스로부터 만들어진 객체가 초기화될 때
생성자가 가지고 있는 값이
초기값(=시작값)이 된다.

2. 만드는 방법 => init 함수

class User:
	def __init__(self):
    # 속성을 초기화 한다.

파이썬에서 생성자를 만들 때,
init 함수라는 특별한 함수를 사용한다. (이닛)
이름 양옆으로 _ _ 밑줄 두 개를 친다.

3. 사용법

이 클래스에서 새로운 객체를 만들 때마다,
init함수가 호출된다.


4. 생성자에서 속성 정의하기

class User:
	def __init__(self, id):
    	self.id = id
        
user_0 = User(4)
print(user_0.id)

self는?
실제 객체이다. 만들어지고 있거나, 또는 초기화되고 있는 객체말이다.

self 뒤에는 parameter 매개변수가 온다.
개수는 얼마든지 올 수 있다.
이 매개변수들은
클래스로부터 객체가 생성될 때마다
함께 생성되며,
해당 객체가 기본적으로 가진 속성이 된다.

그럼 매개변수의 속성값은 어떻게 생성할까?
예전에 배웠던 argument 인수값과 비슷하다.

함수에 parameter가 있었을 때,
함수를 호출하면서 argument 인수에 값을 넣어주었다.

이번에도 똑같다.

객체를 만들 때 클래스 괄호 뒤에
파라미터에 대한 속성값을 넣어주면 된다.

객체 = 클래스(속성값)
class User:
    def __init__(self, id):
        self.id = id
        
user_0 = User(5)

= 동일하다

user_0.id = 5

참고로
아래와 같이 바꿀 수도 있다.
id : 인수 = 파라미터= 속성값

user_id: 속성
는 같아도 되고, 달라도 된다!


5. 이닛 함수에서 파라미터를 추가해보자.

class User:
    def __init__(self, id, name, age, gender):
        self.id = id
        self.user_name = name
        self.user_age = age
        self.user_gender = gender

user_0 = User(0, "Jenny", 20, "f")
user_1 = User(1, "Tonny", 30, "m")
user_2 = User(2, "Claire", 25, "f")

print(user_0.id)
print(user_1.id)
print(user_1.user_name)
print(user_2.user_age)


6. 속성을 기본값으로 정하기

이닛 함수에서 파라미터를 두지 않고,
속성을 기본값으로 정할 수도 있다.
아래에서 scores는 0으로 두었다.
객체를 만들어 scores 속성값을 확인해보면
어떤 객체에서도 0이다!

class User:
    def __init__(self, id, name, age, gender):
        self.id = id
        self.user_name = name
        self.user_age = age
        self.user_gender = gender
        self.scores = 0

user_0 = User(0, "Jenny", 20, "f")
user_1 = User(1, "Tonny", 30, "m")
user_2 = User(2, "Claire", 25, "f")

print(user_0.id)
print(user_1.id)
print(user_1.user_name)
print(user_2.user_age)
print(user_0.scores)