다른 명령
새 문서: == 클래스 용어 == {{틀:고지상자 |제목=파이썬 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클래스를 수정후 다시 실행 .
- __new__ 메소드는 자동으로 실행되므로 제거합니다.
- __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__ #소멸자