Class
Function
하나의 특정 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드
Class
함수뿐만 아니라 관련된 변수까지도 한꺼번에 묶어서 관리하고 재사용할 수 있게 해주는 것
Object
class = 붕어빵 틀
object = 붕어빵
하나의 클래스로부터 무수히 많은 객체 생성가능
Attribute
class에 포함되는 변수
Method
class에 포함되는 함수
class내 기재되어 있는 함수
Instants
class에 정의된 데이터나 함수를 사용하기 위해 생성
class를 실체화한 것
class를 기반으로 생성된 객체를 가리킴
인스턴스명 = 클래스명()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Dog: # 클래스 선언
name = "삼식이"
age = 3
breed = "골든 리트리버"
def bark(self):
print(self.name + "가 멍멍하고 짖는다.")
my_dog = Dog() # 인스턴스 생성
print(my_dog.breed) # 인스턴스의 속성 접근
my_dog.bark() # 인스턴스의 메소드 호출
|
cs |
Dog class는 name, age, breed라는 속성들과 bark()라는 메소드로 구성
my_dog는 객체이다
my_dog는 Dog 클래스의 인스턴스다
class선언
class 키워드 사용해 선언
def 키워드 사용해 메소드 선언
1
2
3
4
5
6
7
8
9
|
class SomeClass:
def __init__(self,something):
self.something = something
def some_function(self):
print(self.something)
a = SomeClass("some_value")
a.some_function()
|
cs |
Self
클래스의 인스턴스를 나타내는 변수
self는 class내 method들의 첫번째 인자로 전달
1
2
3
4
5
6
7
8
|
class Person:
def sayHello():
print('Hi')
man = Person()
man.sayHello()
#TypeError: sayHello() takes 0 positional arguments but 1 was given
|
cs |
→ self를 전달하지 않은 메소드를 만들어도 상관없으나 에러가 뜸
1
2
3
4
5
6
7
8
9
|
class Person:
def sayHello(self):
print('Hi')
man = Person()
man.sayHello()
# result
#Hi
|
cs |
→ self를 sayHello메소드에 넣자 잘 수행됨
=> 클래스의 메소드들은 self를 첫번째 인자로 받도록 해줘야 함
=>> Python이 자동으로 self를 전달하기 때문
self의 위치를 통해 역할 알아보기
1
2
3
4
5
6
7
8
9
|
class Person:
def sayHello(self):
# id() = 객체의 메모리주소를 알아내는 함수
print(id(self))
print('Hi')
man = Person()
man.sayHello()
print(id(man))
|
cs |
140045137514192
Hi
140045137514192
# self의 주소나 man의 주소가 같음
즉, man이나 self나 사실 같은 것
__init__
initialize method (초기화 메소드)
초기화를 위한 함수
인스턴스화를 실시할때 반드시 처음에 호출되는 특수한 함수
오브젝트 생성(인스턴스 생성)과 관련해 데이터의 초기를 실시하는 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Dog:
def setInfo(self, name):
self.name = name
def bark(self):
print(self.name + "가 멍멍하고 짖는다.")
my_dog = Dog()
my_dog.bark()
# 결과 : AttributeError: 'Dog' object has no attribute 'name'
|
cs |
- Dog클래스의 my_dog인스턴스 생성
- set_info() 메소드 호출
- name이라는 변수를 먼저 선언
- bark() 메소드 호출
→ name이란 변수를 초기화해야함, __init__메소드 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Dog: # 클래스 선언
def __init__(self, name):
self.name = name
def bark(self):
print(self.name + "가 멍멍하고 짖는다.")
my_dog = Dog("삼식이") # 인스턴스 생성
my_dog.bark() # 인스턴스의 메소드 호출
|
cs |
__init__()은 반드시 첫번째 인수를 self로 지정
1
2
3
|
class SomeClass:
def __init__(self,something):#constructor
self.something = something
|
cs |
여러개의 정보를 변수로 하는 class구문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class MyStatus:
def __init__(self,age,name,height,weight):
self.age = age
self.name = name
self.height = height
self.weight = weight
def print_name(self):
print(self.name)
def print_age(self):
print(self.age)
def print_height(self):
print(self.height)
def print_weight(self):
print(self.weight)
a = MyStatus(34,"yamada",170,78)
|
cs |
__call__
함수를 호출하는 것처럼 클래스의 객체도 호출하게 만들어주는 메소드
__init__은 인스턴스 초기화, __call__은 인스턴스가 호출되었을 때 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Calc:
def __init__(self,n1,n2):
self.n1=n1
self.n2=n2
return print(self.n1,self.n2)
def __call__(self,n1,n2):
self.n1=n1
self.n2=n2
return print(self.n1+self.n2)
s = Calc(1,2)
s(7,8)
|
cs |
result
1 2
15
→ 이처럼 __init__으로 class생성, __call__로 정의된 것을 함수처럼 불러오게 하는 역할
참고 및 출처 : http://www.tcpschool.com/python2018/python_class_object , https://engineer-mole.tistory.com/190 , https://jsp-dev.tistory.com/entry/Python-self-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0 , https://wjunsea.tistory.com/61