파이썬은 모든 것이 객체 다
객체 =>"어떤 것 "
인스턴스 : 클래스로 만들어진 객체 (개념)
ex) 클래스 => 붕어빵 틀 (설계도)
인스턴스 => 붕어빵 (만들어 진 것)
클래스 = 타입
#리터럴 방식
#별도의 클래스를 호출하지 않고 객체를 생성하는 방법
a = 123
b = True
# 클래스 정의하기 ( = Type 정의하기 )
class Person:
name = 'Jonghyun'
person_1=Person()
##=> Person 이라는 클래스(타입)이 생기게 된다.
print(type(person_1))
>>>
<class '__main__.Person'>
## isinstance(a,b) a 가 b의 클래스로 이루어져 있니?
print(isinstance(person_1,Person))
>>>
True
# 클래스 정의하기 ( = Type 정의하기 )
class Person:
name = 'Jonghyun'
# 클래스 안에 정의된 함수 -> 메소드
def run(self):
print('헥헥')
person_1=Person()
person_1.run()
##=> Person 이라는 타입이 생기게 된다.
print(type(person_1))
print(isinstance(person_1,Person))
#생성자 메서드
class Person :
def __init__(self):
print('생성 되었습니다.')
p1=Person()
p2=Person()
######################################################
#생성자 메서드
class Person :
def __init__(self , name , age):
#인스턴스 변수를 정의하기 위해 사용!
self.name = name
self.age = age
p1 = Person('이종현','27')
print(p1.name,p1.age)
>>>
이종현 27
#######################################################
class Person :
def __init__(self , name , age = 1):
#인스턴스 변수를 정의하기 위해 사용!
self.name = name
self.age = age
p1 = Person('이종현')
print(p1.name,p1.age)
>>>
이종현 1
# 소멸자 메서드
class Person:
def __init__(self):
print('안녕하세요')
def __del__(self):
print('bye bye')
p1 = Person()
del p1
##매직 메서드 활용
class Person:
def __init__(self , name , age , height):
self.name = name
self.age = age
self.height = height
def __lt__(self,other):
print(f'{self.name} : {self.age}살 / {other.name} : {other.age}살')
return self.age > other.age
def __len__(self):
return self.height
def __str__(self):
return f'<{self.name}> : {self.age}살'
p1 = Person('종현',27,181)
p2 = Person('수정',22,160)
p1 > p2
print(len(p1))
p3 = Person('종수',20,170)
print(p3)
class MyClass:
var ='Class 변수'
@classmethod
def class_method(cls):
print(cls.var)
return cls
MyClass.class_method()
MyClass
>>>
Class 변수
#스태택 메서드
class MyClass:
var ='Class 변수'
@staticmethod
def static_method(static):
return static
MyClass.static_method()
>>>
TypeError: static_method() missing 1 required positional argument: 'static'
# 스태틱은 한 개의 위치 인자가 필요하다
#####################################################
#스태택 메서드
class MyClass:
var ='Class 변수'
@staticmethod
def static_method():
return 'static'
print(MyClass.static_method())
>>>>
'static'
추상화 - 프로그램 상에서의 클래스에 행동을 정의
상속
class Person:
def __init__(self , name , age):
self.name =name
self.age = age
def talk(self):
print(f'반갑습니다! {self.name} 입니다.')
p1 = Person('이종현','27')
p1.talk()
class Professor(Person) :
#상속받고싶은 클래스를 넣어준다.
def __init__(self, name, age, department):
self.name = name
self.age =age
self.department = department
pro1 = Professor('김교수',50,'컴공')
pro1.talk()
>>>
반갑습니다! 이종현 입니다.
반갑습니다! 김교수 입니다.
class Student(Person):
def __init__(self, name,age,gpa):
self.name = name
self.age = age
self.gpa = gpa
def talk(self):
print(f'충성충성! {self.name}입니다. 교수님')
s1 = Student('수정',21,4.5)
s1.talk()
>>>
충성충성! 수정입니다. 교수님
상속 관련 함수와 메소드
class Person:
def __init__(self , name , age):
self.name =name
self.age = age
def talk(self):
print(f'반갑습니다! {self.name} 입니다.')
class Child(Person):
def __init__(self, name, age , height):
super().__init__(name, age)
self.height = height
c1=Child('종수',25,'181')
print(c1.height)
c1.talk()
>>>
181
반갑습니다! 종수 입니다.
class FirstChild ( Dad , Mom):
#다중 상속
#다중 상속 일 때, 먼저 영향을 받는 클래스의 인스턴스를 받음
#mro 메소드
#다중 상속
class A:
name ='A'
class B:
name ='B'
class C(A):
name ='C'
class D(B,C):
pass
d = D()
print(d.name)