변수 : 인스턴스 변수(객체 전용)와 클래스 변수(객체 공유)
인스턴스 변수 - self.변수로 초기화 하면 인스턴스 변수. 클래스로 접근은 가능하나 인스턴스가 생성 되지 않았을 때는 무의미
클래스 변수 : class 이름.변수로 초기화 하면 클래스 변수. 클래스와 인스턴스로 접근 가능
메소드 : 함수와 동일한 의미
객체의 멤버에 접근할 때 인스턴스이름.멤버, 클래스이름.멤버 이렇게 사용
#Car 클래스
num = 123 # 자료형: int, 변수: num
my_car = Car() # 자료형: Car 클래스, 객체: my_car
# 객체명 = 클래스명() ***new 사용안함
#클래스 속성
class Myclass :
number = 100
def inc_10(self):
Myclass.number += 10
def inc_20(self):
Myclass.number +=20
obj1 = Myclass()
obj1.inc_10()
print(obj1.number)
obj2 = Myclass()
obj2.inc_20()
print(obj2.number)
--------------------------
#인스턴스 속성
class MyClass :
def __init__(self, number):
self.number = number
def inc_10(self):
self.number += 10
def inc_20(self):
self.number += 20
obj1 = MyClass(100)
obj1.inc_10()
obj1.inc_20()
print(obj1.number)
obj2 = MyClass(200)
obj2.inc_10()
obj2.inc_20()
print(obj2.number)
#합계/평균
import math
class SumAvg :
title = '-3과목 합계와 평균'
def __init__(self, name, kor, eng, math):
self.name = name
self.kor = kor
self.eng = eng
self.math = math
def getSum(self):
sum = self.kor + self.eng + self.math
return sum
s1 = SumAvg('김성윤',85,90,83)
print(SumAvg.title)
print('이름:%s'%s1.name)
print('국어:%d,영어:%d,수학:%d'%(s1.kor,s1.eng,s1.math))
print('합계:%d, 평균:%1f'%(s1.getSum(),s1.getSum()/3))
#실행결과
-3과목 합계와 평균
이름:김성윤
국어:85,영어:90,수학:83
합계:258, 평균:86.000000
-------------------------
#사칙연산
class Calculator :
def __init__(self, num1, num2):
self.num1 = num1
self.num2 = num2
def add(self):
return self.num1 + self.num2
def sub(self):
return self.num1 - self.num2
def mul(self):
return self.num1 * self.num2
def div(self):
return self.num1 / self.num2
a = int(input('첫 번째 수를 입력하세요:'))
b = int(input('두 번째 수를 입력하세요:'))
cal1 = Calculator(a,b)
print('%d - %d = %d'%(a, b, cal1.sub()))
print('%d / %d = %.1f'%(a, b, cal1.div()))
#실행결과
첫 번째 수를 입력하세요:10
두 번째 수를 입력하세요:20
10 - 20 = -10
10 / 20 = 0.5
한 클래스가 다른 클래스로부터 데이터 속성과 메소드를 물려받는 것
class 기반 클래스 :
# 멤버 정의
class 파생 클래스(기반 클래스)
# 아무 멤버를 정의하지 않아도 기반 클래스의 모든 것을 물려받아 갖게 됩니다.
# 단, 프라이빗 멤버(__로 시작되는 이름을 갖는 멤버)는 제외입니다.
class Base :
def base_method(self):
print("base_method)
class Derived(Base):
pass
base = Base()
base.base_method()
base_method
derived = Derived()
derived.base_method()
base_method
상속 - super()
상속 - 다중 상속
다중상속은 자식 하나가 여러 부모로부터 상속을 받는 것
파생 클래스의 정의에 기반 클래스의 이름을 콤마로 구분해서 쭉 적어주면 다중상속이 이루어짐
class A :
pass
class B :
pass
class C :
pass
class D(A, B, C) : #클래스 D는 클래스 A,B,C를 부모로부터 상속받습니다.
pass
---------------------
class A :
def method(self):
print("A")
class B(A) :
def method(self):
print("B")
class C(A) :
def method(self):
print("C")
class D(B,C): #D는 B의 method()를 물려받음(먼저거를 물려받음)
pass
상속 - 오버라이딩과 super()
class Person() : #class Person
def __init__