파이썬따라하기/5클래스모듈패키지

#클래스모듈패키지1편 - 파이썬 클래스 기초 python

모두의 실험실 2023. 5. 6. 23:59
728x90

※접속하시어 실습하면서 학습하세요. 파이썬 설치 없이 코드실행할 수 있어요
클릭클릭 : https://tinyurl.com/ynpj4ykv

 

파이썬 실습 실행 가능해요 이용해 보세요

파이썬 코드 입력하시고 맨우측 '▶' 클릭하면 실행 됩니다 #파이썬 테스트 코드 (복사붙여넣기로 테스트해보세요) for i in range(5): print(str(i) + ' 오늘하루 행복하세요') 파이썬은 컴퓨터 언어다 이

modoopython.tistory.com

 

일반적 클래스는 학급, 강의 뜻이 있지만

다른 뜻도 있음

 

'클라스가 다르다'

'이태원 클라스' 등

계층 수준 등급등 뜻도 존재

 

파이썬에서는 클래스가 템플릿, 틀과 같은

역할로 사용됨

 

클래스는 기능에 맞는 이름을 정의해야함

class size_calculator():
    
    def rectangular(self,x,y):
        print(x*y)
        
    def circle(self,r):
        print(r*r*3.14)
    
    def triangle(self,w,h):
        print(w*h*0.5)
        
sc = size_calculator()
sc.rectangular(2,2)

-결과 (드래그로 확인가능)

4      

 

size_calculator 는 도형의 면적 다루는 클래스임

다양한 도형의 면적 구하는 함수로 구성됨

 

size_calculator는 도형의 면적을 구하는 틀과 같음

 

클래스에서는 클래스가 선언될 때 초기화 하는 기능이 존재

class size_calculator():
    
    def __init__(self):
        print('hi size_calculator')
        self.pi = 3.14
    
    def rectangular(self,x,y):
        print(x*y)
        
    def circle(self,r):
        print(r*r*self.pi )
    
    def triangle(self,w,h):
        print(w*h*0.5)
        
sc = size_calculator()
sc.circle(2)
print(sc.pi)

-결과 (드래그로 확인가능)

hi size_calculator
12.56
3.14

 

클래스 선언(sc = size_calculator()) 과 동시에 init 함수가 수행됨

그래서 'hi size_calculator'가 출력됨

클래스 내의 전역변수를 설정할때는 변수앞에 self를 붙여야함

그래서 클래스 선언시 전역변수 self.pi의 값이 3.14로 선언됨

 

그래서  원의 면적을 구할때 self.pi의 값이 적용이 되고

sc는 size_calculator()와 같은 기능을 하므로

self.pi가 클래스 밖에서 수행될때는

sc.pi의 형태로 사용되어 3.14가 출력됨

클래스 안에서는 self.pi로 각 함수 내부에서 사용됨

 

클래스는 template 또는 틀이라고 설명함

그래서 sc = size_calculator()

라고 하면 sc에 틀을 복사한다고 생각하면됨

 

치킨 본점이 있고, 각 동네에 프랜차이즈 지점이 있지만

치킨맛은 동일한것과 같이

프랜차이즈는 모두 틀을 복사한것과 같음

 

그래서 sc는 객체이며 영어로 object하고 함

하나의 클래스는 무한정 sc와 같은 객체를 만들어 낼 수 있음

 

용어보다는 연습을 통한

클래스와 객체의 활용이 더 중요함

 

객체 선언시 클래스에 입력값을 적용할 수도 있음

class login():
    def __init__(self, t_id, t_pw):
        print('hi login')
        self.id = t_id
        self.pw = t_pw
        
    def google(self):
        print('google login')
    
    def naver(self):
        print('naver login')
        
    def kakao(self):
        print('kakao login')
        
    def call_method(self):
        self.google()
        
userid = 'modoo'
password = '1234'

lg = login(userid, password)
print(lg.id)
print(lg.pw)
lg.call_method()

-결과 (드래그로 확인가능)

hi login
modoo
1234

google login

 

입력값이 있는 class를 구현할 때는

class에 입력값을 대입하는 것이 아니라

init함수에 입력값을 대입함

 

클래스 내부에서 함수는 method (메소드) 라고함

 

클래스 내부에서 메소드와 변수를

사용 할때는 self를 붙여서 사용해야함

 

call_method에서 google()을 사용할때는

self.google()로 사용하는 것이 문법임

 

그리고 method를 정의(def) 할때

def google(self): 와 같이

입력변수 자리 맨앞에는 self를 작성해야하며

맨 끝은 ':' 콜론을 작성해야함

 

클래스에는 상속이 있음

일반적으로 상속은 부모가 자식에게 

재산을 물려줄 때 상속한다고 함

 

그럼 자식은 그 재산을 고스란히 받아서

재산을 늘려갈 수도 있고

재산이 줄어 들 수도 있음

 

python에서 클래스를 상속할때는

줄어드는 것은 없고,

method를 추가하거나

또는 덮어쓸 수가 있음

 

초기에 만들어진 클래스 원본은 

다른 프로그램에서도 많이 쓰일 수 있기때문에

원본 클래스를 변경하기 보다

상속을 받아서 method를 추가하거나

덮어 쓰는 용도로 사용됨

class login():
    def __init__(self, t_id, t_pw):
        print('hi login')
        self.id = t_id
        self.pw = t_pw
        
    def google(self):
        print('google login')
    
    def naver(self):
        print('naver login')
        
    def kakao(self):
        print('kakao login')
        
    def call_method(self):
        self.google()
        
userid = 'modoo'
password = '1234'

lg = login(userid, password)
print(lg.id)
print(lg.pw)
lg.call_method()

print('-------------')
class login_child(login):
    def call_method(self):
        self.naver()
    
    def call_method2(self):
        self.kakao()
        
lg_child = login_child(userid, password)
print(lg_child.id)
print(lg_child.pw)
lg_child.call_method()
lg_child.call_method2()

-결과 (드래그로 확인가능)

hi login
modoo
1234
google login
-------------
hi login
modoo
1234
naver login
kakao login

 

login클래스를 상속받아 login_child클래스를 정의함

call_method()가 self.google에서 self.naver로 변경됨

변경이 가능하며 변경한것을 오버라이딩(overriding) 이라 하며

덮어쓴다라는 의미임

 

그리고 call_method2처럼 method를 추가도 가능함

 

상속받은 클래스에 필요한 method만 더 추가함으로써

기능은 유지되고 코드수는 간결한 장점이 있음

 

그리고 클래스내 변수가 정의 되어있지만

객제를 활용하여 변경도 가능함

class login():
    def __init__(self, t_id, t_pw):
        print('hi login')
        self.id = t_id
        self.pw = t_pw
        
    def google(self):
        print('google login')
    
    def naver(self):
        print('naver login')
        
    def kakao(self):
        print('kakao login')
        
    def call_parameter(self):
        print('login info >>')
        print(self.id)
        print(self.pw)
        
userid = 'modoo'
password = '1234'

lg = login(userid, password)
lg.call_parameter()

print('-----------')

lg.id = 'python'
lg.pw = '0000'
lg.call_parameter()

-결과 (드래그로 확인가능)

hi login
login info >>
modoo
1234
-----------
login info >>
python
0000

 

id와 pw가 변경이 되었고

call_parameter()에 적용되었음을 확인함

 

변수, 메서드(함수), 클래스가 있지만

클래스가 프로그램 전체가 되는 경우가 많음

꾸준한 실행을 통행서 클래스를 구현하는 것이

자연스러워 지면

무엇이든 코딩해 낼 수 있음

 

어려울 수록 값지며

스스로를 발전시킨다

 

태그
-------------------------------------------------------------
#python, #파이썬, #anaconda, #아나콘다, #기초, #클래스, #class, #import, #selenium, #셀레늄, #자동, #교육, #코딩교육, #coding, #chatgpt, #챗GPT, #로봇,

 

 

 

 

728x90
반응형