일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- i-node full
- svn: Can't find a temporary directory: Internal error
- 모바엑스텀 설치
- Default vpc
- uptime -V
- 패키지 출력
- histoy옵션
- uptime -s
- pam_tally -u
- root로그인안됨
- ln -Tfs
- pam_tally2.so
- 프리티어 비용 발생
- rm -f
- Default 삭제
- 리눅스 telnet
- aws 자격증 접수 오류
- 버프스위트
- uptime -p
- burpsuite
- Default 생성
- CentOS-Base.repo
- 장치에 남은 공간이 없음
- Unable to create a new virtual machine: No permission to perform this operation.
- pam_tally -u -r
- Burp Suite
- HISTTIMEFORMAT
- AWS 시험후기
- 버프슈트
- AWS
- Yesterday
- Today
- Total
13. 파이선(Python) 클래스(Class)1 본문
클래스(class)란?
클래스란 여러 가지 답변이 존재 하겠지만 공통적으로 이야기 하는 부분은 “연관 있는 데이터를 하나로 묶어서 프로그램의 구현 및 관리를 용이”하게 합니다. 참고로 c언어에는 클래스가 없습니다. 즉, 클래스가 없더라도 프로그램을 충분히 만들 수 있습니다.
클래스 개념
클래스는 틀(붕어빵, 타코야끼, 와플)이라고 생각하시면 됩니다. 붕어빵 틀로 찍으면 붕어빵(인스턴스)이 생성되고 타코야끼 틀로 찍으면 타코야끼(인스턴스)가 생성되고 와플 틀로 찍으면 와플(인스턴스)이 나오게 됩니다. 즉, 클래스란 설계도면(클래스)이고 인스턴스는 클래스에 의해서 만들어진 것을 뜻합니다.
1. 클래스 사용법
함수를 사용할 때는 def라는 키워드를 사용했지만 클래스는 class라는 키워드를 사용합니다.
1.1. 클래스 정의
>>> class Student:
pass
>>> stu1 = Student()
>>> stu1
<__main__.Student object at 0x02C337D0>
클래스 안에는 변수나 함수를 넣을 수 있습니다. 위 코드에서는 가장 간단한 형태의 클래스 정의를 보여주기 위해 변수나 함수를 넣지 않고 pass라는 키워드만을 사용했습니다. pass 키워드를 사용하면 클래스 내부에 아무것도 넣지 않은 상태의 클래스를 만들 수 있게 됩니다.
객체와 인스턴스의 차이점
클래스에 의해서 만들어진 객체를 인스턴스라고도 합니다. 둘이 헷갈리는데 한 번 자세하게 알아보도록 하겠습니다. stu1 = Student() 이렇게 만들게 되면 stu1은 객체입니다. 그리고 stu1라는 객체는 Student의 인스턴스 입니다. 즉, 인스턴스라는 것은 특정 객체(stu1)가 어떤 클래스(Student) 객체인지를 관계 위주로 설명 할 때 사용됩니다.
1.2. 클래스 변수
>>> class Student:
name = "홍길동“
클래스의 이름은 Student입니다. 이 클래스는 학생의 정보를 제공하기 위해서 만들었습니다. 정보를 확인하기 위해서는 객체를 생성해야 합니다. 아래에 객체를 생성하도록 하겠습니다.
>>> stu1 = Student()
위와 같이 하면 stu1라는 객체를 만들어서 Student 클래스를 사용할 수 있습니다.
stu1의 객체를 활용해서 클래스 안의 정보를 얻고 싶으면 어떻게 해야 될까요?
>>> stu1.name
'홍길동’
‘.’(도트 연산자)를 이용해서 호출 할 수 있습니다. 변수나 함수를 접근할 때 “객체.(변수) or 객체.(함수)”를 사용하면 됩니다.
1.3. 클래스 함수
>>> class Student:
name = "홍길동"
def ShowInfo(self):
print("이름 : %s" %self.name)
1.2와 같이 클래스의 이름은 Student입니다. 함수를 추가 했습니다. 이름 정보를 보여주는 함수입니다.
똑같이 객체를 만들어 보겠습니다.
>>> stu1 = Student()
함수에 접근하겠습니다.
>>> stu1.ShowInfo()
이름 : 홍길동
정상적으로 출력이 됩니다.
2. self 알아보기
클래스를 사용하다보니까 self라는 것을 보게 됩니다.
2.1. self 함수 예제 클래스
>>> class Test:
def func1():
print("func1")
def func2(self):
print("func2")
func1은 self가 없고 func2는 self가 있습니다.
객체를 만들고 테스트 해보겠습니다.
>>> test = Test()
>>> test.func1()
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
test.func1()
TypeError: func1() takes 0 positional arguments but 1 was given
>>> test.func2()
func2
위에 결과를 보면 self가 없으면 에러 구문을 발생시키고 self가 있으면 정확한 결과 값을 보여주게 됩니다. self는 자기 자신을 표현하는 것이라고 보면 됩니다.
test.func2(self) -> test.func2(test)
* self == test
2.2. self 변수 예제 클래스
>>> class Student:
name = "홍길동"
def SetName(self,name1):
self.name = name1
def ShowInfo(self):
print("이름 : %s" %self.name)
>>> stu1 = Student()
>>> stu1.ShowInfo()
이름 : 홍길동
>>> stu1.SetName("임꺽정")
>>> stu1.ShowInfo()
이름 : 임꺽정
위에 예제를 살펴보면 함수뿐만 아니라 일반 변수에도 self를 사용하는 것을 볼 수 있습니다.
2.3. self가 있는 변수
>>> class Student:
def SetName(self,name1):
self.name = name1
def ShowInfo(self):
print("이름 : %s" %self.name)
>>> stu2 = Student()
>>> stu2.ShowInfo()
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
stu2.ShowInfo()
File "<pyshell#7>", line 6, in ShowInfo
print("이름 : %s" %self.name)
AttributeError: 'Student' object has no attribute 'name'
>>> stu2.SetName("홍길동2")
>>> stu2.ShowInfo()
이름 : 홍길동2
2.4. self가 없는 변수
>>> class Student:
def SetName(self,name1):
name = name1
def ShowInfo(self):
print("이름 : %s" %self.name)
>>> stu2 = Student()
>>> stu2.ShowInfo()
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
stu2.ShowInfo()
File "<pyshell#13>", line 6, in ShowInfo
print("이름 : %s" %self.name)
AttributeError: 'Student' object has no attribute 'name'
>>> stu2.SetName("홍길동3")
>>> stu2.ShowInfo()
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
stu2.ShowInfo()
File "<pyshell#13>", line 6, in ShowInfo
print("이름 : %s" %self.name)
AttributeError: 'Student' object has no attribute 'name'
self를 사용하는 이유?
첫 번째로 함수에서 self를 사용하는 이유는 정확하게 모르겠지만 사용해야 클래스의 함수를 사용할 수 있다는 것을 알게 되었습니다.
두 번째로 위에 예제를 보면 알 수 있지만 변수에 self를 사용하는 이유는 자기 자신이라는 것을 알려주기 위해서 사용 합니다.
3. 클래스의 __init__(self)
파이썬에서 __init__(self)는 메서드 생성자라고 합니다. 파이썬에서 __를 사용하는 함수는 모두 특별한 메서드입니다. 메서드는 클래스에서 사용하는 함수를 메서드라고 합니다. 참고로 init는 ‘초기화하다’라는 뜻을 가진 initialize 약자입니다.
3.1 __init__(self) 예제1
>>> class Test:
def __init__(self):
print("생성자 입니다.")
>>> test = Test()
생성자 입니다.
객체를 생성하는 순간 내가 접근하지 않았던 함수가 동작됩니다.
3.2 __init__(self) 예제2
>>> class Test:
def __init__(self,name):
self.name = name
>>> test = Test()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
test = Test()
TypeError: __init__() missing 1 required positional argument: 'name’
여기를 살펴보면 객체를 생성하는 순간 에러가 발생하게 됩니다.
이유는 Test() 안에 값을 넣지 않아서 에러가 납니다.
>>> test = Test("홍길동")
이렇게 사용하면 에러가 나지 않습니다. 즉, 여기서 알 수 있는 부분은 __init__(self)라는 부분의 함수를 사용하게 되면 거기에 맞는 값을 넣어 줘야 객체가 생성된다는 것을 알 수 있습니다.
'Python > Python 기본 개념' 카테고리의 다른 글
14. 파이썬(Python) 파일 다루기(파일 읽기, 쓰기, 추가하기) (4) | 2017.10.26 |
---|---|
13. 파이썬(Python) 클래스(Class)2 (2) | 2017.10.20 |
12. 파이썬(Python) 모듈(module) (0) | 2017.09.18 |
11. 파이썬(Python) IDLE 디렉터리(폴더) 위치 변경 (0) | 2017.09.04 |
10. 파이썬(Python) import, from의 간단한 개념 (0) | 2017.09.01 |