Python/기초

7. 파이썬의 클래스, 모듈, 패키지

frcn 2019. 9. 22. 19:19
반응형

Class

 

1. 클래스 생성 및 기초

같은 객체를 여러개 만들어야할 때, 클래스를 만들어두면 인스턴스를 쉽게 생성할 수 있다.

class Bank:

	def __init__(self, name):
		self.name = name

	def get_name(self):
		return self.name

	def call_name(self, num):
		print("좋아 은행의 %s고객님은 %d번째 손님입니다" % (self.name, num))


x = Bank("Jack")
print(x.get_name)
x.call_name(3)


1)메소드는 def 함수명(변수): 내용


2) self라는 인수는 입력하지 않아도 알아서 인스턴스 명으로 호출되어 들어간다


3) __init__은 생성자로 클래스로 인스턴스를 만들때 반드시 해야할 것이 무엇인지 정한다.
(위의 예에서는 name값을 정해야함)


2. 클래스 상속

클래스를 만들 때, 다른 클래스의 기능을 물려받을 수 있다.

1) 클래스 상속 및 메서드 오버라이딩

class GoodBank:

	def __init__(self, name):
		self.name = name

	def get_name(self):
		return self.name

	def call_name(self, num):
		print("좋아 은행의 %s고객님은 %d번째 손님입니다" % (self.name, num))


#class 클래스명(상속받을 클래스명): 이렇게 하면 클래스 상속이 된다.
class BadBank(GoodBank):

	def call_name(self, num):
		print("싫어 은행의 %s고객님은 %d번째 손님입니다" % (self.name, num))

	#메서드 이름을 동일하게 정하고, 그 내용만 변한다면 오버라이딩(overriding)된다.


a=BadBank('Tom')
print(a.get_name())
a.call_name(4)


2) 연산자 오버로딩

연산자 오버로딩이란 연산자 (+, -, *, / )를 객체끼리 사용할 수 있게 하는 방법

class GoodBank:

	def __init__(self, name):
		self.name = name

	def get_name(self):
		return self.name

	def call_name(self, num):
		print("좋아 은행의 %s고객님은 %d번째 손님입니다" % (self.name, num))

	def __add__(self, other):
		print("%s와 %s은 다른 은행의 고객이네요" %(self.name, other.name))

	#연산자 오버로딩.
	#다른 인스턴스의 변수를 불러오려면 인스턴스명.변수를 해야한다. (other.name)


class BadBank(GoodBank):

	def call_name(self, num):
		print("싫어 은행의 %s고객님은 %d번째 손님입니다" % (self.name, num))


x=GoodBank("Jackson")
y=BadBank("Tom")

x+y

#Jackson와 Tom은 다른 은행의 고객이네요

 

 

 

모듈

 

모듈이란 함수, 변수, 클래스를 모아놓은 파일.
, 다른 파이썬 파일을 불러와서 현재 작업하는 파이썬 파일에서 사용하도록 도움

, 정상적으로 모듈을 사용하기 위해서는 두 파일이 같은 디렉토리에 존재해야한다.

 

 

1) 모듈 사용법

 

import 모듈명 을 통해서 모듈을 사용함.

메소드 일부만 불러오고 싶을때는

from 모듈명 import 메소드1, 메소드2, 메소드3

이렇게 불러옴.

from 모듈명 import * (모든 것을 불러옴)

#모듈1.py

def sum(a,b):
	print(a+b)



#나의 py파일

import 모듈1

모듈1.sum(1,10)

#결과 : 11 


2. if __name__ == "__main__"

모듈을 import했을 때, 엉뚱한 결과값들이 출력될 수가 있다.

#모듈1.py

def sum(a,b):
	print(a+b)

print("안녕 나는 모듈1이야")

#나의 py파일

import 모듈1

모듈1.sum(1,10)

#결과:
#안녕 나는 모듈1이야
#11 


이런 상황을 피하기 위해서, 실행 결과들을 모두 모듈1.py 마지막 부분에 if __name__ == "__main__" 구간에 넣도록 한다.

그러면 모듈1.py가 직접 실행되었을때만 결과값들이 도출된다.

 

#모듈1.py

def sum(a,b):
	print(a+b)

if __name__ == "__main__" :
	print("안녕 나는 모듈1이야")


#나의 py파일

import 모듈1

모듈1.sum(1,10)

#결과:
#11 

 


패키지

 

파이썬 모듈들을 계층적으로 관리하기 위한 것.

디렉토리 찾는 방법은 현재 작업중인 파이썬 파일이 있는 곳에서부터 경로 시작.

relative하게 찾으려면 ..경로
여기서 ..은 부모디렉토리를 말함

#folderA\folderB\echo.py

def echo():
	print("echo!")



#같은 패키지의 echo.py를 다른 py파일에서 사용해보자

import folderA.folderB.echo
	#from folderA.folderB import echo 이런 형식도 가능

folderA.folderB.echo.echo()

#결과 echo!
반응형