Day 5 객체지향과 클래스
2023. 3. 9. 17:09ㆍ파이썬
1. 객체지향 프로그래밍¶
- 문제를 여러개의 객체 단위로 나눠 작업하는 방식
1-1. 객체(Object)¶
- 물리적으로 존재하거나, 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말함
1-2. 클래스(Class) ?¶
객체를 생성하기위한 일종의 설계도와 같다.
명사는 변수다. 클래스 : 명사 + 함수
- 클래스는 프로퍼티(필드), 메소드(함수)로 구성되어 있다.
* Properity = 데이터가 저장되는 곳 * Method = 객체의 동작에 해당하는 실행 블록
1-3. 클래스와 객체¶
건축 설계도가 클래스 / 실제로 지어진 집은 객체
객체는 클래스로 생성되어 구체화된 인스턴스
실제로 클래스가 인스턴스화 되어 메모리에 상주하는 형태를 객체라고 부른다.
파이썬의 모든 변수와 함수는 객체로 저장
2. 클래스 만들기¶
class 클래스명:
프로퍼티 1 = 값1
프로퍼티 2 = 값2
.....
def 메소드명(self,변수1,변수2...):
메소드가 호출되면 실행할 문장
.....
def 메소드명(self,변수1,변수2...):
메소드가 호출되면 실행할 문장
.....
클래스를 통해 호출되는 변수를 프로퍼티(필드)라고 부름
클래스를 통해 호출되는 함수를 메소드(함수) 라고 부름
Self : 클래스의 각 호출한 객체를 가리킨다
In [ ]:
class Dog:
pass #내용이 없는 블록을 만들 때 사용
def func1():
pass
In [ ]:
# 클래스를 통해 객체를 생성
# dog 클래스 1
rucy = Dog()
print(rucy)
print(type(rucy))
<__main__.Dog object at 0x7f6ac5b8fd00> <class '__main__.Dog'>
In [ ]:
li1 = [1,2,3,4,5]
print(li1)
print(type(li1))
print(id(li1))
[1, 2, 3, 4, 5] <class 'list'> 140096559128832
In [ ]:
# dog 클래스 2
ppomi = Dog()
print(ppomi)
print(type(ppomi))
print(id(ppomi))
<__main__.Dog object at 0x7f6ac5b8f3d0> <class '__main__.Dog'> 140096560493520
In [ ]:
# 스태틱 기능을 가진 것이면 import random -> random.random을 random만 써도 가능함.
In [ ]:
# 주로 클래스는 앞글자를 대문자로 만든다 / 함수(소문자)와 구분하기위해
In [ ]:
class Dog:
name = '루시'
age = 13
family = '포메'
def eat(self):
print(self)
print('사료를 먹습니다.')
In [ ]:
rucy = Dog()
print(rucy.name)
print(rucy.age)
print(rucy.family)
rucy.eat()
print(rucy)
루시 13 포메 <__main__.Dog object at 0x7f6ac5a28ca0> 사료를 먹습니다. <__main__.Dog object at 0x7f6ac5a28ca0>
In [ ]:
ppomi = Dog()
print(ppomi.name)
print(ppomi.age)
print(ppomi.family)
ppomi.eat
#프로퍼티는 클래스가 같아도 안에 들어있는 값이 다를 수있다.
#메소드는 재활용이가능 (클래스만 같으면 사용할 수 있게)
#메소드는 자동적으로 self가 매개변수로 들어간다.
#(왜? 메소드도 하나의 객체로 따로 분리 되기때문)
루시 13 포메
Out[ ]:
<bound method Dog.eat of <__main__.Dog object at 0x7f6aadef0d00>>
In [ ]:
class Dog:
def __init__(self):
print(self, 'init가 호출 !')
In [ ]:
#객체를 생성하면서 __init__이 자동으로 호출 되어서 print가 찍힘
rucy = Dog() # 빈 괄호가 생성자를 호출하라는 의미
print()
print(rucy)
<__main__.Dog object at 0x7f6aadeff400> init가 호출 ! <__main__.Dog object at 0x7f6aadeff400>
In [ ]:
class Dog:
def __init__(self):
self.name = '이름없음'
self.age = 0
#만약 self가 없으면 누구객체의 name,age인지 구별하지 못하기 때문에 !
In [ ]:
Rucy = Dog()
print(Rucy)
print(Rucy.name)
print(Rucy.age)
<__main__.Dog object at 0x7f6ac5a28100> 이름없음 0
In [ ]:
ppomi = Dog()
print(ppomi)
print(ppomi.name)
print(ppomi.age)
<__main__.Dog object at 0x7f6aadefff70> 이름없음 0
In [ ]:
Rucy.name = '루시'
Rucy.age = 13
print(Rucy)
print(Rucy.name)
print(Rucy.age)
<__main__.Dog object at 0x7f6ac5a01850> 루시 13
In [ ]:
ppomi.name = '뽀미'
ppomi.age = 7
print(ppomi)
print(ppomi.name)
print(ppomi.age)
<__main__.Dog object at 0x7f6aadeff970> 뽀미 7
In [ ]:
class Dog:
def __init__(self):
self.name = '이름없음'
self.age = 0
self.nickname = '닉네임 없음' #지역변수로 선언
def go(self):
print(f'{self.name}가 달립니다 !')
#print(f'{nickname}가 달립니다 !') #NameError: name 'nickname' is not defined
def go(self):
print(f'{self.name}가 달립니다 !')
print(f'{self.nickname}가 달립니다 !')
In [ ]:
Rucy = Dog()
Rucy.name = '루시'
Rucy.age = 13
Rucy.go()
루시가 달립니다 ! 닉네임 없음가 달립니다 !
In [ ]:
class Dog():
def __init__(self,name,age, nickname = '닉네임없음'):
self.name = name
self.age = age
self.nickname = nickname
In [ ]:
rucy = Dog('루시',13)
print(rucy.name)
print(rucy.age)
루시 13
In [ ]:
ppomi = Dog('뽀미',7,'봄')
print(ppomi.name)
print(ppomi.age)
print(ppomi.nickname)
뽀미 7 봄
728x90
'파이썬' 카테고리의 다른 글
Day 6 구글 드라이브 활용 (0) | 2023.03.10 |
---|---|
Day 6 모듈 (0) | 2023.03.10 |
Day 5 call back 함수 및 lambda 함수 (0) | 2023.03.09 |
Day 4~5 사용자 정의 함수 및 변수의 범위 (0) | 2023.03.09 |
Day 3-2 제어문 (조건문, 반복문) (0) | 2023.03.07 |