59doit

[Python] class 본문

Programming/Python(파이썬)

[Python] class

yul_S2 2022. 11. 2. 13:04
반응형
class calc_class :
    x=y=0
    def __init__(self,a,b) :
        self.x = a
        self.y = b

    def plus(self):
        p = self.x  +  self.y
        return p

    def minus(self):
        m = self.x - self.y
        return m

obj = calc_class(10,20)
print('plus=',obj.plus())
print('minus=',obj.minus())
# <출력>
# plus= 30
# minus= -10

 

 

class Car :
    cc = 0
    door = 0
    carType = 0
    def __init__ (self,cc,door,carType) :
        self.cc = cc
        self.door = door
        self.carType = carType
    def display(self):                    # return 은 없음
        print("자동차는 %d cc이고, 문짝은 %d개, 타입은 %s" %(self.cc, self.door,self.carType))

car1 = Car(2000,4,"승용차")                #참조변수:car1,car2 // car(실인수)
car2 = Car(3000,6,"suv")

car1.display()                            #메소드도 함수이므로 괄호
car2.display()
#<출력>
#자동차는 2000 cc이고, 문짝은 4개, 타입은 승용차
#자동차는 3000 cc이고, 문짝은 6개, 타입은 suv

 

class multiply :
    x=y=0
    def __init__ (self,x,y) :
        self.x = x
        self.y = y
    def mul(self):
        return self.x * self.y
obj = multiply(10,20)
print("곱셈 =",obj.mul())
# <출력> 곱셈 = 200

 

 

생성자 없을경우

class multiply2 :
    x=y=0
    def __init__(self):             # 생성자 없을경우
        pass                        # 생성자 없을경우
    def data(self,x,y):
        self.x = x
        self.y = y
    def mul(self):
        return self.x * self.y

obj = multiply2()                  #기본생성자
obj.data(10,20)                    #동적 변수 생성
print("곱셈 =",obj.mul())
# <출력> 곱셈 = 200

 

 

init 없이 self 만 사용하여 메소드안에서 result 값 받기

class multiply3 :
    #x=y=0
    #def __init__(self):
        #pass
    def data(self,x,y):
        self.x = x
        self.y = y
    def mul(self):
        result = self.x * self.y
        self.display(result)
    def display(self,result):
        print("곱셈 = %d" %(result))

obj = multiply3()      #기본생성자
obj.data(10,20)        #동적 변수 생성
obj.mul()
# <출력> 곱셈 = 200

 

클래스 맴버  ; 클래스 메서드(cls) 사용, 객체메서드(self) 사용

class datepro :
    content = "날짜처리클래스"
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day
    def display(self):                      # 객체 메서드
        print("%d-%d-%d" % (self.year, self.month,self.day))
    @classmethod                            # 클래스 메서드 -> 함수장식자 필요함!!!!
    def date_string(cls,datestr):           # datestr : date string 에 새로 입력받을 값
        year = datestr[:4]
        month = datestr[4:6]
        day = datestr[6:]
        print(f"{year}년 {month}월 {day}일")

#객체
date=datepro(2022,9,6)           # 생성자
print(date.content)              # <출력> 날짜처리클래스
print(date.year)                 # <출력> 2022
date.display()                   # <출력> 2022-9-6

#클래스
print(datepro.content)              # <출력> 날짜처리클래스
datepro.date_string('20220906')     # <출력> 2022년 09월 06일

 

 

 

캡슐화

class Account:
    __balance = 0                #잔액
    __accName = None             #예금주
    __accno = None               #계좌번호
    def __init__(self,bal,name,no) :
        self.__balance = bal     #잔액초기화
        self.__accName = name 
        self.__accno = no
    #getter
    def getBalance(self):
        return self.__balance, self.__accName, self.__accno
    #setter 입금
    def deposit(self , money):
        if money < 0 :
            print('금액확인')
            return
        self.__balance += money
    #setter 출금
    def withdraw(self, money):
        if self.__balance < money :
            print('잔액부족')
            return
        self.__balance -= money
acc = Account ( 10000, 'JANE', '125152412541')

bal = acc.getBalance()
print('계좌정보 : ',bal)
# <출력> 계좌정보 :  (10000, 'JANE', '125152412541')

acc.deposit(3000)
bal = acc.getBalance()
print('계좌정보 : ',bal)
# <출력> 계좌정보 :  (13000, 'JANE', '125152412541')

 

 

 

상속

class Super :                        # super클래스생성
    def __init__(self,name,age):     # 동적멤버변수 생성
        self.name = name
        self.age = age

    def display(self):              # 동적멤버변수 출력하는 역할
        print('name : %s , age : %d' % (self.name,self.age))
sup = Super('부모',55)
sup.display()                       # ★부모멤버 호출
# <출력> name : 부모 , age : 55

class Sub(Super) :
    gender = None                   # 자식멤버
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
    def display(self):
        print('name : %s , age = %d, gender : %s' %( self.name, self.age,self.gender))
sub = Sub('자식',25,'여')
sub.display()                       # ★자식멤버호출
# <출력> name : 자식 , age = 25, gender : 여

 

 

 

Super 클래스         

1. 부모클래스 super().__init()   ; 부모 클래스 호출

class Parent :
    def __init__(self,name,job):
        self.name = name
        self.job = job

    def display(self):
        print('name : %s , job : %s' % (self.name, self.job))
        #print('name : {}, job :{}'.format(self.name, self.job))

p = Parent('철수','회사원')
p.display()   
# <출력> name : 철수 , job : 회사원

 

 

2. 자식클래스 

class Children(Parent) :   # 위의 부모클래스에서 상속받음 (Parent)
    gender = None
    def __init__(self,name,job,gender) :
        # 부모 클래스에서 생성자 호출해서 받은 멤버변수 =>  초기화
        super(). __init__(name,job)    # =>  name, job 초기화
        self.gender = gender           # gender 추가
    def display(self):
        print('name : {}, job :{}, gender : {}'.format(self.name, self.job,self.gender))

chil = Children('YUNA','techer','여')
chil.display()
# <출력> name : YUNA, job :techer, gender : 여

 

 

 

매서드 지정

class Employee:
    neme = None
    pay = 0
    def __init__(self,name):
        self.name = name
    def pay_calc(self):               # 부모클래스에서 사용하지않음 => pass
        pass
class Permanent(Employee) :
    def __init__(self,name):
        super().__init__(name)
    def pay_calc(self,base,bonus):    # 정규직
        self.pay = base+bonus
        print('총 수령액:', format(self.pay,'3,d'),'원')        # 3,d 에 공백 있으면 안됨
class Temporary(Employee) :
    def __init__(self,name):
        super().__init__(name)
    def pay_calc(self,tpay,time):
        self.pay = tpay*time
        print('총 수령액:',format(self.pay,'3,d'),'원')

p = Permanent('정규직')
p.pay_calc(3000000,200000)             # <출력> 총 수령액: 3,200,000 원

t = Temporary('임시직')
t.pay_calc(15000,50)                   # <출력> 총 수령액: 750,000 원

 

 

다형성 매서드

class Flight :
    def fly(self):
        print('날다','fly 원형 메서드')
class Airplane(Flight) :
    def fly(self):
        print('비행기가 날다')
class Bird(Flight):
    def fly(self):
        print('새가 날다')
class Paper(Flight) :
    def fly(self):
        print('종이가 날아가다')

flight=Flight()
air=Airplane()
bird=Bird()
paper=Paper()

flight.fly()
# <출력> 날다 fly 원형 메서드

flight=air
flight.fly()
# <출력> 비행기가 날다

flight=bird
flight.fly()
# <출력> 새가 날다

flight=paper
flight.fly()
# <출력> 종이가 날아가다

 

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python] 전처리/정규화  (0) 2022.11.03
[Python] import class (내장클래스)  (0) 2022.11.03
[Python] 재귀함수  (0) 2022.11.02
[Python] inner_func  (0) 2022.11.02
[Python] 함수 사용 활용  (0) 2022.11.02
Comments