[Python] 구글링으로 독학하는 파이썬3
내 마음대로 이해한대로 적었기 때문에 틀릴 수 있음 지적 환영
이전글
구글링으로 독학하는 파이썬2
5. 클래스
어느 프로그래밍 언어들과 마찬가지로 파이썬에도 클래스가 있단다. 클래스가 뭐냐고하면..;; 객체지향 관점부터 설명해야하지 않나… 음 내 생각을 적어보자면.. 그냥 어떤것들의 공통점을 묶어놓은 틀이다. 직원들은 다 이름과 직급이 있고 일을하거나 밥을 먹는다. 그러니까 과장은 > 먹는다 > 일도한다 > 이름은 A다. 대리도 > 먹는다 > 일도한다 > 직급은 대리다 이렇게 일일이 정의 안하고 직원이라는 클래스를 만들어놓고 과장>직원. 대리>직원 이렇게하면 아 얘네 다 먹거나 일하거나 하겠군 알 수 있는 것이지…..^^ 설명을 못하겠군….. 패스~
암튼 클래스는 어떻게 만드냐면
>>> class test: #여기만 보면 된다. class 클래스명: 이렇게 정의된다.
... pass #더이상 실행할 것이 없다는 뜻
...
>>> test
<class '__main__.test'>
>>> test()
<__main__.test object at 0x01135550>
여기서 test와 test()의 차이를 써보자면..
test는 test라는 것은 클래스입니다 이거고 test()는 test라는 객체의 주소는 이겁니다.. 이정도일까…틀리면 누군가 지적해주겠지?...
5-1. 객체
여기서 test라는 클래스는 이것이다.. 까지만 했으니 써먹어야하지 않을까? 객체 생성을 해서 써보자.
객체 생성이 뭐냐면… 위의 예를 인용하자면 직원이라는 클래스 만들었으니 김대리라는 직원 객체를 만들자! 이런.. 실체를 만드는 거라고 해야하나..
각설하고 소스를 보면 알 수 있다 만능 소스^^
>>> class Student: # Student라는 클래스 정의
... def setStudent(self, stdNo, name):
... self.stdNo = stdNo
... self.name = name
...
>>> firstStudent = Student() # firstStudent라는 객체는 Student라는 클래스!
>>> firstStudent.setStudent(1,'A')
>>> secondStudent = Student() # secondStudent 라는 객체도 만들었다.
>>> secondStudent.setStudent(2,'B')
>>> firstStudent.name
'A'
>>> secondStudent.name
'B'
이 소스를 처음 접한 나 :
아.. class Student:
~.. 클래스 만들었네…
아 def setStudent
~~~ Student라는 클래스에 setStudent라는 메소드 만들었네… 알지알지
인자가 self
, stdNo
, name
이네!
음…응? self.stdNo = stdNo?…………………..
왜 setStudent라는 메소드쓰는데 인수가 2개지?….
..천천히 하나씩 알아보자
- self
메소드 첫 인자는 무조건 그 객체 본인이다! 그러니까 말그대로self
다. 연결해주는 느낌? 그래서 메소드를 사용할 때는self
자리에 값을 따로 주지는 않는다. 그래서setStudent()
의 인자는 3개지만 인수는 2개인거다. 맨처음엔 아무것도 모르고 다들self
라는 이름을 왜이렇게 많이 쓸까했는데 …this
랑 비슷한 것 같다. 객체 초기화할때 보통
this.name=name
this.age=age
뭐 이런 식으로 하듯이 파이썬도
>>> class Student:
... def setStudent(self, stdNo, name):
... self.stdNo = stdNo
... self.name = name
이런 느낌이다. 왜 이렇게 하는지는 아직까지 이해가 안가지만… 좀 더 파이썬을 배우고나면 익숙해지겠지
꼭 self라고 써야해 이건 법이야~~ 이건 아니지만 암묵적인 룰같다 클래스 앞글자를 대문자로 쓴다던가 뭐 이런 규칙같은 …
- __init__
자바밖에 모르는 바보인 나는 아니.. 자바에서 객체 생성하고 인스턴스를 만드려면 new
를 써서 생성자를 호출하는게 필수인데.. 초기화를 안하나? 얘는 그런 거 없나? 어떻게 알아서 해주는 거야? 싶었는데! __init__
이라는 게 있습니다. (참고로 _가 양옆 2개씩이다)
>>> class Test:
... def __init__(self):
... print("init 호출")
...
...
>>> test = Test()
init 호출
저렇게 양옆에 더블언더스코어를 붙인 메소드를 매직 메소드라고 하는 것 같다…(다음에 포스팅해야지)
Leave a comment