메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Python class: 두 판 사이의 차이

데브카페
새 문서: == 클래스 용어 == {{틀:고지상자 |제목=파이썬 CLASS 관련 용어 |내용= * '''클래스(class)''' : 멤버와 메쏘드를 갖는 객체 * '''클래스 인스턴스(class instance)'''' : 클래스를 호출하여 만들어지는 객체 * '''멤버(member)''' : 클래스의 변수 * '''메소드(method)''' : 클래스의 함수 * '''어트리뷰트(attribute)''': 속성, 멤버 와 메쏘드의 전체 * '''슈퍼클래스(supperclass)''' : base class라고 하며...
 
편집 요약 없음
 
1번째 줄: 1번째 줄:
== 클래스 용어 ==
== 클래스 용어 ==
{{틀:고지상자
{{틀:요약
|제목=파이썬 CLASS 관련 용어
|제목=파이썬 CLASS 관련 용어
|내용=
|내용=
18번째 줄: 18번째 줄:


== 파이썬 클래스 특징 ==
== 파이썬 클래스 특징 ==
{{틀:고지상자
{{틀:요약
|제목= 특징
|제목= 특징
|내용=
|내용=
28번째 줄: 28번째 줄:


== 클래스 정의 ==
== 클래스 정의 ==
{{틀:고지상자
{{틀:요약
|제목=
|제목=
: 클래스를 작성하기 위해서는 class 키워드 사용하여 새로운 클래스 생성.
: 클래스를 작성하기 위해서는 class 키워드 사용하여 새로운 클래스 생성.
62번째 줄: 62번째 줄:


=== 클래스 객체 생성 및 변수에 할당 ===
=== 클래스 객체 생성 및 변수에 할당 ===
{{틀:고지상자
{{틀:요약
|제목=
|제목=
: 새로운 객체를 생성하기, java나 C# 등의 다른 언어와 다르게 new 키워드가 없다.
: 새로운 객체를 생성하기, java나 C# 등의 다른 언어와 다르게 new 키워드가 없다.
73번째 줄: 73번째 줄:


== 클래스 메소드 작성 ==
== 클래스 메소드 작성 ==
{{틀:고지상자
{{틀:요약
|제목=
|제목=
메소드란? 클래스 내의 함수
메소드란? 클래스 내의 함수
96번째 줄: 96번째 줄:
   'KR949'
   'KR949'
</source>   
</source>   
{{틀:고지상자
{{틀:요약
|아이콘=filter_1
|아이콘=filter_1
|제목=
|제목=
파이썬 메서드의 '''첫번째 파라미터명'''은 관례적으로 '''self''' 라는 이름을 사용.
파이썬 메서드의 '''첫번째 파라미터명'''은 관례적으로 '''self''' 라는 이름을 사용.
}}
}}
{{틀:고지상자
{{틀:요약
|아이콘=filter_2
|아이콘=filter_2
|제목=
|제목=
호출 시 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용하게 된 것
호출 시 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용하게 된 것
}}
}}
{{틀:고지상자
{{틀:요약
|아이콘=filter_3
|아이콘=filter_3
|제목=
|제목=

2025년 6월 11일 (수) 00:58 기준 최신판

클래스 용어

 list_alt파이썬 CLASS 관련 용어

파이썬 클래스 특징

 list_alt특징

클래스 정의

 list_alt: 클래스를 작성하기 위해서는 class 키워드 사용하여 새로운 클래스 생성.
  • Python의 대부분 네이밍컨벤션이 단어와 단어사이에 _ 를 넣는다.
  • 하지만 클래스의 네이밍컨벤션은 CamelCase 를 사용.

  class CustomClass:
      def __init__(self, param):
          .......

클래스 생성 연습

에디터에서 airtravel.py 파일 생성.

클래스 생성은 아래와 같이 class 키워드 및 클래스의 이름을 입력하여 생성.

  class Flight:
      pass

생성한 클래스는 REPL(read-eval-print loop,사용자의 입력 후 실행하고 결과를 반환시키는 프로그래밍 환경)에서 아래와 같이 import할 수 있음.

  >>> from airtravel import Flight
  >>> Flight
  <class 'airtravel.Flight'>

클래스 객체 생성 및 변수에 할당

 list_alt: 새로운 객체를 생성하기, java나 C# 등의 다른 언어와 다르게 new 키워드가 없다.

  
  >>> f = Flight()
  >>> type(f)
  <class 'airtravel.Flight'>

클래스 메소드 작성

 list_alt메소드란? 클래스 내의 함수

  • 메소드 작성하기
  
  class Flight:
      def number(self):
          return 'KR949'

인스턴스 메소드의 접근



  • 인스턴스의 메소드 사용
  
  >>> from airtravel import Flight
  >>> f = Flight()
  >>> f.number()
  'KR949'
 filter_1파이썬 메서드의 첫번째 파라미터명은 관례적으로 self 라는 이름을 사용.

 filter_2호출 시 호출한 객체 자신이 전달되기 때문에 self라는 이름을 사용하게 된 것

 filter_3이를 이용하여 클래스에서 바로 메소드로 접근하면서 위에서 할당한 Flight의 객체 f를 파라미터로 전달함으로써 똑같은 결과값 얻습니다.
  • 클래스의 내부에 self 파라미터가 포함되는데 이를 이용한 접근법

    
  >>> Flight.number(f) # f는 Flight객체
  'KR949'

생성자와 초기화자






생성자/초기화자 예제

생성자 / 초기화 실행 순서 확인

  class Flight:
  	#초기화자 
	def __init__(self):
	  print('init')
	  super().__init__()

	# 생성자     
	def __new__(cls):
	  print('new')
	  return super().__new__(cls)

	# 메소드 
	def number(self):
	  return 'KR949'










  >>> from airtravel import Flight
  >>> f = Flight()
--- 결과 -- 
  new
  init

Flight클래스를 수정후 다시 실행 .

  1. __new__ 메소드는 자동으로 실행되므로 제거합니다.
  2. __init__ 메소드에 코드를 수정합니다.

아래의 코드에서 self._number 로 할당했는데












  class Flight:
      def __init__(self, number):
          self._number = number
            
      def number(self):
          return self._number

다시 REPL에서 확인 합니다.

   >>> from airtravel import Flight
   >>> f = Flight(5)
   >>> f.number()
   5
   >>> f._number
   5

접근제어자




초기화자(__init__)객체의 불변성을 확립(유효성검증 수행)




  • 비행기 번호는 앞에 두글자는 영문이어야하며 대문자입니다.
  • 그리고 뒤에 세번째 글자부터 마지막까지는 양의 정수여야합니다.

Flight클래스를 다음과 같이 변경해봅니다.

객체를 생성시 규칙에 맞지 않는 값이 들어오면 ValueError를 발생시킵니다.


  class Flight:
    
      def __init__(self, number):
          if not number[:2].isalpha():
              raise ValueError("첫 두글자가 알파벳이 아닙니다.")
          if not number[:2].isupper():
              raise ValueError("첫 두글자가 대문자가 아닙니다.")
          if not number[2:].isdigit():
              raise ValueError("세번째 글자 이상이 양의 숫자가 아닙니다.")
          self._number = number
            
      ...생략
  >>> from airtravel import Flight
  >>> f= Flight("abc")
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/Users/Blidkaga/Documents/CodeLab/Python_Basic/airtravel.py", line 11, in __init__
      raise ValueError("첫 두글자가 대문자가 아닙니다.")
  ValueError: 첫 두글자가 대문자가 아닙니다.
  >>> f= Flight("AB0")
  >>> f= Flight("AB001")

비공개 속성



  >>> f= Flight("AB001")
  >>> f._number
  'AB001'
  >>> f._number = 'abc'
  >>> f.number()
  'abc'





언더바를 던더바로 변경

_name 변수를 __name으로 변경하였습니다.

  class Flight:
    
      def __init__(self, number):
          if not number[:2].isalpha():
              raise ValueError("첫 두글자가 알파벳이 아닙니다.")
          if not number[:2].isupper():
              raise ValueError("첫 두글자가 대문자가 아닙니다.")
          if not number[2:].isdigit():
              raise ValueError("세번째 글자 이상이 양의 숫자가 아닙니다.")
          self.__number = number
    
      def number(self):
          return self.__number

결과 확인.

number()인스턴스 메소드를 통해서 내부에서는 접근 가능한 모습을 보이나, 객체 f의 속성으로 접근 시 에러가 발생합니다.
  >>> from airtravel import Flight
  >>> f= Flight("AB001")
  >>> f.number() 
  'AB001'
  >>> f.__number
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  AttributeError: 'Flight' object has no attribute '__number'

파이썬은 메소드 오버로딩이 없다.




  • Java코드는 아래와 같은 코드를 허용합니다.
  class Adder{  
      static int add(int a,int b)
      {
          return a+b;
      }  
      static int add(int a,int b,int c)
      {
          return a+b+c;
      }  
  }





  class Korea:
    
      def __init__(self, name,population, captial):
          self.name = name
          self.population = population
          self.capital = captial
    
      def show(self):
          print(
              """
              국가의 이름은 {} 입니다.
              국가의 인구는 {} 입니다.
              국가의 수도는 {} 입니다.
              """.format(self.name, self.population, self.capital)
          )
    
      def show(self, abc):
          print('abc :', abc)

결과

  >>> from inheritance import *
  >>> a = Korea('대한민국',50000000, '서울')
  >>> a.show()
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  TypeError: show() missing 1 required positional argument: 'abc'

클래스 내부에서 메소드 호출

class MyClass:
	def set(self,v):
		self.value =v
	def incr(self):
		self.set(self.value+1)
	def put(self):
		print(self.value)

c = MyClass()
c.set('egg')
c.put()

생성자 와 소멸자

__init__ #생성자 __del__ #소멸자

Comments