LIST
클래스
- 개발자가 설계할 때 단순화 시켜줌
- 데이터와 기능을 함께 묶는 방법을 제공
- 클래스 만들기 : 객체의 새로운 형 ⇒ 새로운 인스턴스 만들기
- 어트리뷰트 : 인스턴스 상태 유지
- 메서드 : 인스턴스 상태 변경
1. 이름과 객체
- 클래스로 만든 객체 : 인스턴스
- 인스턴스 : 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용
- 객체성을 갖고, 여러개의 scope에서 같은 객체에 연결될 수 있음
- 과자 틀 → 클래스 (class)
- 과자 틀에 의해서 만들어진 과자 → 객체 (object)
2. scope and namespace
- namespace: <이름 → 객체> 매핑
- 서로 다른 순간에 만들어지고 서로 다른 수명을 갖음
- global namespace : 모듈 정의를 읽는 동안 만들어짐
- 현재 코드 블록 전체에 적용되는 선언
- __**main**__
- 표현식을 사용하여 확인할 수 있는 프로그램의 최상위 환경 이름,
- 프로그램 실행 시 첫 번째로 실행되는 python 모듈
- local namespace :
- 함수가 호출 될 때 만들어짐
- 함수가 복귀하거나 함수 내에서 처리되지 않는 예외를 일으킬 때 삭제됨
- 모든 참조와 대입은 모듈의 global name을 포함하는 중간 scope로 바로 감
- 현재 함수의 지역 이름들을 참조
- attribute : 점 뒤에 오는 모든 이름
- z.real → real : z의 attribute
- 읽기 전용 이거나 쓰기 가능
- 모듈 attribute : 쓰기 가능, del로 삭제 가능
- scope : namespace를 직접 액세스할 수 있는 파이썬 프로그램의 텍스트 적인 영역
- 직접 액세스 가능한 : 이름에 대한 정규화 되지 않은 참조가 그 namespace에서 이름을 찾으려고 시도한다는 의미
- 동적으로 사용됨
- global (개발할때 안쓰는게 맞음)
- 나열된 식별자들이 전역으로 해석 되어야 함
- 일반 함수 내에서 전역 변수를 대상으로 함
- nonlocal
- 나열된 식별자들이 global을 제외하고 가장 가까이서 둘러싸는 스코프에서 이미 연결된 변수를 가리키도록 함
- 연결의 기본 동작 : 지역 이름 공간을 먼저 검색하는 것
- 둘러싼 scope에서 이미 존재하는 연결들을 가리켜야 함
- local scope에 이미 존재하는 연결들과 겹치지 않아야 함
- 동일한 이름의 새로운 변수가 생성되는 것을 방지하기 위해서 사용됨
- 중첩 함수 내에서 비 지역 변수를 대상으로 함
- 변수 앞에 nonlocal 키워드를 붙여주면 해당 변수는 새로운 지역 변수가 되지 않고 함수 밖에서 이미 선언된 비 전역 변수를 가리키게 됩니다.
- local
- 현재 스콥 에 있는 변수들
- 스콥이 중첩,
- 자신의 기준에 상위에 있는 지역변수 → 논 로컬변수
- 자신의 스콥 상위 변수를 사용하기 위해서
- 싱글톤 패턴 : 프로그램에서 하나만 존재
9.3. 클래스 문법
class ClassName:
<statement-1>
.
.
.
<statement-N>
- new namespace가 만들어지며 local scope로 사용됨
- 클래스 정의가 정상적으로 끝날 때 클래스 객체가 만들어짐
9.3.2. 클래스 객체
- 어트리뷰트 참조
- 어트리뷰트 참조에 사용되는 표준 문법을 사용함’
9.3.3. 인스턴스 개체
- 데이터 어트리뷰트는 선언될 필요가 없다.
- 처음 대입될 때 태어남
9.3.4. 메서드 객체
- 메서드
- 객체에 속하는 함수
- 연결되자마자 호출됨
9.3.5. 클래스와 인스턴스 변수
- 인스턴스 변수 : 인스턴스별 데이터를 위한 것
- 클래스 변수 : 클래스의 모든 인스턴스에서 공유되는 어트리뷰트와 메서드를 위한 것
9.4. 기타 주의사항
- 인스턴스, 클래스 모두에서 같은 어트리뷰트 등장 → 어트리뷰트 조회는 인스턴스를 우선함
- 데이터 어트리뷰트는 메서드 뿐만 아니라, 객체의 일반적인 사용자에 의해서 참조될 수도 있습니다.
- 클라이언트는 데이터 어트리뷰트를 조심스럽게 사용해야 하며 데이터 어트리뷰트를 건드려서 메서드들에 의해 유지되는 불변성을 망가뜨릴 수 있다.
- 메서드 안에서 데이터 어트리뷰트들을 참조하는 줄임 표현은 없다.
- 메서드 첫번째 인자 : self ⇒ 의미는 없으나 있어야함
- 클래스 어트리뷰트인 모든 함수는 그 클래스의 인스턴스들을 위한 메서드를 정의함
- 함수 객체를 클래스의 지역변수로 대입하는 것 가능함
- 메서드가 클래스가 갖고잇는 함수
- 함수들이 클래스 안에 변수들을 바꿔주고 변수값이 바뀐단→ 상태가 변경됨
- 어트리뷰트-메서드를 나눠서 보긴하지만 메서드도 바뀔수가 잇다.
- 메서드를 다른걸로 바꾸면, 어트리뷰트
9.5. 상속
- 어떤 클래스의 기능을 그대로 물려받으면서 다른 기능을 추가로 할 수 있음
- 상속해주는 클래스 : base class or parent class
- 상속받는 클래스 : 파생 클래스, child class
- BaseClassName 은 파생 클래스 정의를 포함하는 스코프에 정의되어 있어야함
- 파생 클래스
- 메소드
- 예시. 동물. anmimal, 동물클래스를 상속한 강아지, 사람, 물고기 클래스가 있음 동물 클래스의 본다라는 기능→ 세개의 클래스가 그대로 물려받을 수 잇음 .
- 뛴다→ 사람,강아지는 잇지만 물고기 x
- 개별적으로 상속받음
http://www.tcpschool.com/python/OOP_inheritance
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
동물: 생각,먹을수 있음. 소리를 낼 수 있음
이런 기능→ 동물 인터페이스에서 할수잇다고 정의됨
이런 인터페이스→ 강아지, 사람, 물고기 구현 → 각각이 역할을 함
강아지는 입으로 먹고, 사람도
형태만 정의, 구현시킬 수 있다.
먹이를 준다 → 먹이 주는 대상 : anmail : 강아지, 사람, 물고기
어떤것을 추상화시킬 때 사용,
파이썬은 전부 클래스로 처리함
클래스에서 상속으로 처리함
가능한 상속 안쓰는게 좋다..
상속
9.6. 비공개 변수
- 밑줄로 시작하는 이름은 (예를 들어, _spam) API의 공개적이지 않은 부분으로 취급되어야 합니다
- 비공개 변수를 사용하면 서브 클래스와 비공개 변수의 충돌을 피할 수 있다.
- (*네임 맹글링 : name mangling - 변수이름에 _ 를 섞어서 짓이겨 버리기.)
- 맹글링 사용하면, 같은 이름으로 호출하면 에러 발생
- 하위클래스가 상위클래스의 속성을 덮음
- 하위클래스에서 동일한 이름을 사용할 수 있다.
9.7. 잡동사니
- john 인스턴스를 만들엇느넫 존. name
- 애트리뷰트를 동적으로 만들 수 있다.
9.8. 이터레이터
(리스트, 순서가 있음)
- 루핑
- iter : 블록 리더를 만듦
9.9 제너레이터
(range class, 다음꺼 나옴)
- 이터레이터를 만드는 도구
- yield문을 사용함
- local 변수들과 실행 상태가 호출 간에 자동으로 보관됨
9.10 제너레이터 표현식
- 리스트 컴프리헨션과 비슷함
- 대괄호 대신 괄호를 사용하는 문법을 사용한 표현식으로 간결하게 코딩이 가능
- 융통성은 떨어지고, 리스트 컴프리헨션보다는 메모리를 덜 쓰게 된다는 장점이 있음
- 리스트 : 원하는 순서를 볼 수 있음
- 리스트컴프리션 : 리스트를 만들어서, 메모리를 마니씀
- 제너레이터 사용 : 이터레이터 처음부터 다음꺼밖에 접근이 안됨 다음꺼만 가져와서,. 메모리를 덜 씀
반응형
LIST
'파이썬' 카테고리의 다른 글
10. 표준 라이브러리 (0) | 2022.08.21 |
---|---|
8. 예외와 에러 (0) | 2022.08.05 |
파일 읽기 쓰기 (0) | 2022.06.30 |
7. 입력과 출력 (0) | 2022.06.28 |
22.05.29. todolist 복습 (0) | 2022.05.29 |
댓글