파이썬

Class

Mara7 2022. 7. 31. 15:54
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