class Cs
def Cs.class_method()
p "Class method"
end
def instance_method()
p "Instance method"
end
end
i = Cs.new()
Cs.class_method()
i.instance_method()
#Cs.instance_method() 오류발생
#i.class_method() 오류발생
class Cal
attr_reader :v1, :v2
attr_writer :v1
@@_history = []
def initialize(v1,v2)
@v1 = v1
@v2 = v2
end
def add()
result = @v1+@v2
@@_history.push("add : #{@v1}+#{@v2}=#{result}")
return result
end
def subtract()
result = @v1-@v2
@@_history.push("subtract : #{@v1}-#{@v2}=#{result}")
return result
end
def setV1(v)
if v.is_a?(Integer)
@v1 = v
end
end
def getV1()
return @v1
end
def Cal.history()
for item in @@_history
p item
end
end
end
class CalMultiply < Cal
def multiply()
result = @v1*@v2
@@_history.push("multipy : #{@v1}*#{@v2}=#{result}")
return result
end
end
class CalDivide < CalMultiply
def divide()
result = @v1/@v2
@@_history.push("divide : #{@v1}/#{@v2}=#{result}")
return result
end
end
c1 = CalMultiply.new(10,10)
p c1.add()
p c1.multiply()
c2 = CalDivide.new(20, 10)
p c2, c2.add()
p c2, c2.multiply()
p c2, c2.divide()
Cal.history()
질문: 왜 Class method와 Instance method와 static method를 나누지?
내가 생각하는 답변.
class에서 받은 데이터와
instance에서 받은 데이터가 다르게 동작할수 있음. 그걸 효율적으로 관리하기 위해서.
Static method는 데이터와 관련 없는 method같음.(ㅠㅠㅠ몰라..)
진짜 답변은 무엇인가요?
6일만에 이부분까지 왔어요.
먼저 다른 언어를 많이 알고 있는 상태였어요.(matlab, C, R)
새로이 알게된부분은 모듈, 객체지향밖에 없어서 빨리 들을수 있었어요.
원동력이라 하면, 제가 python으로 하고자 하는게 있는데, 그걸 빨리 해보고싶어서 그런거같아요.
제가 만들고자 하는건 '웹크롤링'이라는 것인데, 인터넷 찾아보시면 매우 흥미롭답니다.
그리고, 다른 원동력으로는 친구들에게 언어를 배웠다고 자랑을 많이했어요.
궁금한 것이 있어서요.
_history = [] 에서 언더바를 해준 이유가
Cal.history.append라고 하면 history를 메서드로 인식해서 그런 것인가요?
언더바를 없애고 실행하면
AttributeError: 'function' object has no attribute 'append' 라고 에러 메세지가 뜨더라고요.
전 수업중에 python에서 __를 변수명 앞에 붙여줌으로써 직접접근을 막는다고 배웠었는데요.
제가 인자 중 v1에 __이걸 달고나서 이번 실습을 진행했었습니다.
(환경 : 부모 class = Cal<method : add,subtract> / 자식 class = Cal_v1<method : multiply>)
그런데.. 자식이 __v1에는 접근이 불가하더군요.
해서 이전에 배웠던 getter를 통해 부모의 __v1값을 자식이 얻을 수 있었습니다.
(self.__v1 = x , self.getV1() = o)
쓰고나니 별 것 없습니다만.. 누군가에게 도움이 될 것이란 생각에 적습니다~! 열공해요 !
Luna님 말씀듣고 깜짝 놀라 제 덧글을 살펴보니 제 덧글에 우선 문제가 많았군요. 지금은 이미 파이썬에 푹 빠져 행복한 날들을 보내고 있습니다.
문법에도 완전히 익숙해졌고 Luna님이 말씀하신것처럼 데이터 크롤링과 빅데이터 분석에도 초강력한 힘을 발휘하고 있습니다. 정말 매력적인 언어입니다. tensorflow 접근 언어이기도 해서 다음 달쯤에는 데이터분석을 넘어 기계학습 인공지능 분야로 넘어갈 수 있을 것 같습니다.
그만큼 학습 속도가 굉장한 언어입니다. 그 동안 쌓아왔던 게임 알고리즘 라이브러리들을 최근 파이썬으로 컨버팅하고 있습니다.
먼저 적었던 제 덧글이 무례했던 점 모두에게 미안합니다. 부끄럽지만 지우지는 않겠습니다. 그런데 빅데이터 처리에 자바도 많이 쓰이나요? 이 부분은 몰랐었네요. r과 파이썬 정도만 알고 있었습니다. 저도 13년차 게임 개발자입니다. 개발했던 게임들이 유명한게 많아서 욕먹을까봐 밝히지 못하겠네요 ㅋ
언어에 대한 집착은 없습니다. 이미 사용하고 있는 언어가 양손가락을 넘어가니까요. 다만 그 중에서도 파이썬이 저에게는 첫인상이 강했던 것 같습니다. 그리고 저 덧글 적은 날이 파이썬 처음 시작한 날입니다. 다시한번 미안합니다. 글 마칠께요.
C나 C++, java, C# 언어만 쓰다가 웹개발을 위해 처음 javascript로 넘어왔을 때는 좀 어색하긴 했어도 무난히 적응할 수 있었는데 지금 보고 있는 python이나 ruby는 진짜.. 거지 같습니다. 파이썬 익히기 전에 파이썬이 간결하고 배우기 쉬운 언어라고 들었는데, 기존 문법들에 익숙한 저에게는 그냥 거지 같네요. 매우 거지 같습니다. this 안쓰려고 매개변수 저렇게 쓰는 것도 이상하고 변수 선언 안하고 쓰는 것도 똥싸고 안닦은 것 같고 변수형도 난잡하기 이를데 없고 클래스 매서드도 대체 저게 뭐야ㅜ switch case없는 것도 방금 알았는데 아, 정말..뛰어쓰기로 {}를 대신하는 것도 readable하기보단 unreadable하네요. 문장 끝에 ;넣지 않는 것도 코풀고 안닦은 것 같고.. 아! 옛날 gw-basic 수준이에요. 어떻게 이런 언어들이 인기를 끌고 라이브러리들이 많은 건지, 당췌 이해할 수가 없습니다.