[Python] 객체지향-2

olxtar·2022년 3월 10일
0
post-thumbnail

01. Self

Self : Class에서 Method를 생성할때 self라고 쓴다. 여기서 self는 해당 Class의 특정 Instance를 지칭한다. 즉 아래의 예시에서는~
Son.shoot()에서 괄호사이에 Son이 들어가면서 Class shoot Method의 Self와 대응하게 된다. 즉 shoot이라는 Function을 행하는 주체가 Son이 된다.
Park.pass()에서 괄호사이에 Park이 들어가면서 Class pass Method의 Self와 대응하게 된다. 따라서 pss라는 Function을 행하는 주체는 Park이 된다.
그냥 기억할것은 Class내의 Method 작성시 self를 맨처음으로 준다라고 생각하면 된다.

Class는 단지 여러개의 Instance(object)를 찍어내는 거잖아?
찍어내는 instance들이 다 다른애들이므로 self로 지칭하는거임

ex)

Class FootballPlayer:
	
    def shoot(self):
    	return 'Shoot!'
    
    def pass(self):
    	return 'Pass!'
Son = FootballPlayer()
Park = FootballPlayer()

Son.shoot()
Park.pass()
>>> 'Shoot!'
>>> 'Pass!'




02. __init__

__init__ : 초기화 Method, 어떤 Class의 Instance(Object,객체)가 만들어질때 그 객체가 가질 여러 성질(Property)를 정해주는 Function.
가장 간단한 예시를 보여줄게...
ex)

Class FootballPlayer():
	
    def __init__(self):
    	print("나는 축구선수다!")
        
Son = FootballPlayer()
>>> "나는 축구선수다!"

이처럼 생성되자마자 __init__ method를 바로 행함.
따라서 __init__ method내에 변수, 즉 해당 Class가 가질 Property를 넣어주는거지
따라서 보통 바로 값을 넣어주는 경우보다는 값을 넣을 바구니를 만들어줌!

ex1)

Class FootballPlayer():

	def __init__(self, goal, assi, shoot):
    	self.goal = goal
        self.assi = assi
        self.shoot = shoot
        print("득점 : ", self.goal)
        print("도움 : ", self.assi)
        print("슈팅수 : ", self.shoot)
        
        
Son = FootballPlayer(13, 5, 51)
>>> 득점 :  13
>>> 도움 :  5
>>> 슈팅수 :  51


ex2)

class footballplayer:
    def __init__(self, name, attack, defence, shoot ):
        self.name = name
        self.attack = attack
        self.defence = defence
        self.shoot = shoot
        print(f'Name: {name} \nAttack: {attack} \nDefence: {defence} \nShoot: {shoot}')

--------------------------------------------------------------


Salah = footballplayer('Salah',92,62,85 )

>>>
Name: Salah 
Attack: 92 
Defence: 62 
Shoot: 85


--------------------------------------------------------------

VanDijk = footballplayer('VanDijk', 71, 98, 69)

>>>
Name: VanDijk 
Attack: 71 
Defence: 98 
Shoot: 69

이런 식으로 footballplayer class를 통해서 다수의 instance(object)를 찍어낼 수 있다.




03. 일반 method vs __init__ method

결론부터 말하자면

  • 일반 method는 호출되어야 실행됨
  • __init__ method는 object를 생성하자마자 실행됨

먼저 아래와 같은 두가지 클래스를 생성해보자.

class footballplayer_1():              # 일반 method를 가진 class
    def record(self, goal):
        self.goal = goal
        print(f"{goal}골 넣었음")

class footballplayer_2():              # __init__ method를 가진 class
    def __init__(self, goal):
        self.goal = goal
        print(f"{goal}골 넣었음")



일반 method
class footballplayer_1은 class 혼자서는 받는 argument가 없음
따라서 Drogba.record(10)과 같이 method를 호출하면서 '10'이라는 argument를 넘겨줘야
Drogba.goal에 '10'이 할당되면서 '10골 넣었음' 을 출력하게 됨

Drogba = footballplayer_1()
#Drogba = footballplayer_1(10)     # TypeError: footballplayer_1() takes no arguments

Drogba.record(10)

>>>
10골 넣었음

--------------------------------

Drogba.goal

>>>
10

__init__ method
class footballplayer_2의 __init__ method는 class가 생성되자마자! 실행되는 것 이므로
argument를 꼭 넘겨받아야함!
클래스를 생성하면서 '30'이라는 argument를 넘겨주니

__init__ method의 호출없이 바로 '30골 넣었음' 이라고 출력하고
Torres.goal에 '30'이 할당되어 있음

#Torres = footballplayer_2()    # TypeError: __init__() missing 1 required positional argument: 'goal'
Torres = footballplayer_2(30)

>>>
30골 넣었음

--------------------------------

Torres.goal

>>>
30
profile
예술과 기술

0개의 댓글