250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Compose
- LifeCycle
- android
- viewmodel
- 안드로이드
- appbar
- 앱
- Kotlin
- binding
- textfield
- Coroutines
- Navigation
- 테스트
- scroll
- DART
- intent
- data
- livedata
- drift
- textview
- ScrollView
- Dialog
- tabbar
- CustomScrollView
- 계측
- TEST
- activity
- Button
- 앱바
- Flutter
Archives
- Today
- Total
Study Record
[파이썬] 클래스와 인스턴스와 모듈 본문
728x90
1. 클래스와 인스턴스
☞ 객체(Object)
- 객체(Object)란 실제 세상에 있는 것을 하나의 사물로 정의
- class는 blue print(설계도)와 비슷하다. 설계만 한것이지 사용하도록 따로 설정하여 사용한다.
- 실제 세계에 존재하는 실체(instance)를 객체라고 하고, 객체들의 공통점을 간추려서 개념적으로 나타낸것을 클래스(class)라고 한다.
☞ class 특성
- 클래스(class)는 "class 클래스이름:" 형식으로 정의한다.
- 클래스(class) 내부에 정의된 함수를 메소드(method)라고 한다.
- 객체(EX: teaji)사용은 "인스턴스명 = 클래스()"와 같이 만든다.
- 객체의 메소드를 사용할 때는 "인스턴스.메소드(== 객체.메소드)" 형식을 사용한다.
- class 안의 method는 self가 항상 첫번째 패러미터로 온다.
- self 패러미터는 현재 class의 instance를 참고한다는 뜻이다. class 내의 변수에 접근할 때 사용한다.
☞ 클래스 사용 예시
class Coffee:
total_amount = 10
total_amount_price = 5000
coffee_price = 300
put_price = 0
req_coffee_nums = 0
remaining_price = 0
def __init__(self, price):
# 생성자 - 클래스가 처음 생성될 때 실행된다.
self.coffee_price = price;
print("우리 동네에 자판기가 새로 생겼습니다!")
def request(self):
while True:
self.info()
self.req_coffee_nums = int(input("뽑을 커피의 개수를 입력해주세요 : "))
self.put_price = int(input("자판기에 돈을 넣어주세요 : "))
if self.check_mount() == 1:
self.remaining_price = self.put_price - self.req_coffee_nums * self.coffee_price
self.total_amount_price += self.req_coffee_nums * self.coffee_price
self.total_amount -= self.req_coffee_nums
self.get(self.remaining_price, self.req_coffee_nums)
if self.total_amount <= 0:
print("커피를 다 팔았으니 영업을 종료합니다.")
break
pass
def get(self, price, num):
print("-" * 13)
print("커피 %d 잔과 거스름돈 %d 원 나왔습니다.\n맛있게 드십시오." % (num, price))
print("-" * 13)
pass
def info(self):
print("*" * 13)
print("남은 커피 수 : %d 개\n커피 가격 : %d 원" % (self.total_amount, self.coffee_price))
print("*" * 13)
pass
def check_mount(self):
if self.req_coffee_nums * self.coffee_price > self.put_price:
# 넣은 돈이 부족하다.
print("돈이 부족합니다.\n넣으신 돈 %d 원을 가져가십시오." % (self.put_price))
return -1
if self.total_amount < self.req_coffee_nums:
# 커피 개수가 부족하다.
print("자판기에 남은 커피가 부족합니다.")
return 0
return 1
Coffee().request()
☞ 상속
- 상속이란 어떤 클래스가 다른 클래스의 성질을 물려 받는 것을 말한다.
- 클래스를 만들 때 처음 부터 모든것을 새로 만들 필요 없이, 핵심적인 성질을 갖고 있는 클래스로 부터 상속 받아서 조금만 손을 보면 쓸만한 클래스를 만들수 있다.
- 일반적으로 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
- 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면,
상속을 이용한다.
☞ 상속 예시
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
# Person 클래스를 상속받은 Student 클래스
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname) # 부모의 __init__ 함수를 불러온다.
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.lastname,
"to the class of", self.graduationyear)
x = Student("SeoungChan", "Baik", 2019)
x.welcome()
2. 모듈
모듈(Module)이란 함수, 변수 또는 클래스들을 모아 놓은 파일이다.
미리 만들어진 모듈을 사용할 수도 있고, 직접 정의해서 사용할 수도 있다.
mod1.py | main.py |
def safe_sum(a, b): print("mod1.py 의 safe_sum()함수를 사용합니다.") if type(1) != type(b) or type(1) != type(a): print("정수가 아닙니다.") return None else: return a + b |
import mod1 as mod print(mod.safe_sum('가', 1)) |
☞ if __name__ == "__main__"
__name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수명이다. 주로 쉘프롬프트에서 파이썬 스크립트를 실행할 때는 실행이 되도록 하고, 별도의 프로그램으로 제작이 되는 경우에는 import 해서 사용해야만 사용이 가능하도록 하기 위해서 사용한다.
만약 쉘 프롬프트에서 "# python mod1.py" 처럼 직접 mod1.py 파일을 실행하면 mod1.py 파일의 __name__ 변수에는 __main__ 이라는 값이 저장된다. 하지만 파이썬 쉘이나 다른 파이썬 모듈에서 mod1을 import 할 경우(import mod1)에는 mod1.py의 __name__ 변수에는 "mod1"이라는 mod1.py의 모듈이름 값이 저장된다.
따라서 if __name__ == "__main__" 의 의미는 쉘에서 실행하는 경우가 된다.
# mod1.py 파일 내용
print("__name__ variable : ", __name__)
728x90
'서버보안 > 리눅스 서버보안' 카테고리의 다른 글
[리눅스 서버보안] 시스템 보안에 대한 6가지 보안 주제 (0) | 2021.12.14 |
---|---|
[파이썬] 패키지와 모듈 (0) | 2021.11.29 |
[파이썬] 소켓 프로그래밍 (0) | 2021.11.24 |
[파이썬] 연산자 (0) | 2021.11.24 |
[파이썬] 기본 문법(조건문, 반복문, 함수) (0) | 2021.11.24 |