Python & Ruby

클래스 맴버

클래스 맴버 소개

Ruby

require 'date'
d1 = Date.new(2000, 1, 1)
d2 = Date.new(2010, 1, 1)
p d1.year()
p d2.year()
p Date.today()

ideone.com 

클래스 메소드 (Ruby)

Ruby 

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() 오류발생

ideone.com 

클래스 메소드 (Python)

Python

class Cs:
    @staticmethod
    def static_method():
        print("Static method")
    @classmethod
    def class_method(cls):
        print("Class method")
    def instance_method(self):
        print("Instance method")
i = Cs()
Cs.static_method()
Cs.class_method()
i.instance_method()

ideone.com

클래스 변수 (Ruby)

Ruby

class Cs
  @@count = 0
  def initialize()
    @@count = @@count + 1
  end
  def Cs.getCount()
    return @@count
  end
end
i1 = Cs.new()
i2 = Cs.new()
i3 = Cs.new()
i4 = Cs.new()
p Cs.getCount()

ideone.com 

클래스 변수 (Python)

Python 

class Cs:
    count = 0
    def __init__(self):
        Cs.count = Cs.count + 1
    @classmethod
    def getCount(cls):
        return Cs.count
i1 = Cs()
i2 = Cs()
i3 = Cs()
i4 = Cs()
print(Cs.getCount())

ideone.com

클래스 맴버의 활용 (Ruby)

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()

ideone.com 

클래스 맴버의 활용 (Python)

Python 

class Cal(object):
    _history = []
    def __init__(self, v1, v2):
        if isinstance(v1, int):
            self.v1 = v1
        if isinstance(v2, int):
            self.v2 = v2
    def add(self):
        result = self.v1+self.v2
        Cal._history.append("add : %d+%d=%d" % (self.v1, self.v2, result))
        return result
    def subtract(self):
        result = self.v1-self.v2
        Cal._history.append("subtract : %d-%d=%d" % (self.v1, self.v2, result))
        return result
    def setV1(self, v):
        if isinstance(v, int):
            self.v1 = v
    def getV1(self):
        return self.v1
    @classmethod
    def history(cls):
        for item in Cal._history:
            print(item)
class CalMultiply(Cal):
    def multiply(self):
        result = self.v1*self.v2
        Cal._history.append("multiply : %d*%d=%d" % (self.v1, self.v2, result))
        return result
class CalDivide(CalMultiply):
    def divide(self):
        result = self.v1/self.v2
        Cal._history.append("divide : %d/%d=%d" % (self.v1, self.v2, result))
        return result
c1 = CalMultiply(10,10)
print(c1.add())
print(c1.multiply())
c2 = CalDivide(20,10)
print(c2, c2.add())
print(c2, c2.multiply())
print(c2, c2.divide())
Cal.history()

ideone.com

댓글

댓글 본문
작성자
비밀번호
  1. 개발 고수분들한테는 당연한 것이겠지만,
    제가 한가지 알게된 것 말씀드릴게요~

    전 수업중에 python에서 __를 변수명 앞에 붙여줌으로써 직접접근을 막는다고 배웠었는데요.
    제가 인자 중 v1에 __이걸 달고나서 이번 실습을 진행했었습니다.
    (환경 : 부모 class = Cal<method : add,subtract> / 자식 class = Cal_v1<method : multiply>)

    그런데.. 자식이 __v1에는 접근이 불가하더군요.
    해서 이전에 배웠던 getter를 통해 부모의 __v1값을 자식이 얻을 수 있었습니다.
    (self.__v1 = x , self.getV1() = o)

    쓰고나니 별 것 없습니다만.. 누군가에게 도움이 될 것이란 생각에 적습니다~! 열공해요 !
  2. 미래의 래리 앨리슨
    와우 13년차 프로그래머분들도 egoing님 인강으로 Python을 시작한다니... 대박이네요.
  3. 국제표준규격
    네. 이해해주시니 다행이네요. 고맙습니다.
    대화보기
    • egoing
      모든 언어가 자기만의 개성이 있으니까요. 그 개성에 익숙하면 다른 개성은 또 불편할수도 있는거죠. 자연스럽습니다. 다만 다른 개성에 익숙한 사용자들은 섭섭함을 느낄 수 있니까요. 그것만 조심하시면 비평은 언제나 좋은거죠 ^^
      대화보기
      • 국제표준규격
        Luna님 말씀듣고 깜짝 놀라 제 덧글을 살펴보니 제 덧글에 우선 문제가 많았군요. 지금은 이미 파이썬에 푹 빠져 행복한 날들을 보내고 있습니다.

        문법에도 완전히 익숙해졌고 Luna님이 말씀하신것처럼 데이터 크롤링과 빅데이터 분석에도 초강력한 힘을 발휘하고 있습니다. 정말 매력적인 언어입니다. tensorflow 접근 언어이기도 해서 다음 달쯤에는 데이터분석을 넘어 기계학습 인공지능 분야로 넘어갈 수 있을 것 같습니다.

        그만큼 학습 속도가 굉장한 언어입니다. 그 동안 쌓아왔던 게임 알고리즘 라이브러리들을 최근 파이썬으로 컨버팅하고 있습니다.

        먼저 적었던 제 덧글이 무례했던 점 모두에게 미안합니다. 부끄럽지만 지우지는 않겠습니다. 그런데 빅데이터 처리에 자바도 많이 쓰이나요? 이 부분은 몰랐었네요. r과 파이썬 정도만 알고 있었습니다. 저도 13년차 게임 개발자입니다. 개발했던 게임들이 유명한게 많아서 욕먹을까봐 밝히지 못하겠네요 ㅋ

        언어에 대한 집착은 없습니다. 이미 사용하고 있는 언어가 양손가락을 넘어가니까요. 다만 그 중에서도 파이썬이 저에게는 첫인상이 강했던 것 같습니다. 그리고 저 덧글 적은 날이 파이썬 처음 시작한 날입니다. 다시한번 미안합니다. 글 마칠께요.
      • 국제표준규격
        대화보기
        • 이해할 수 없는 이유는 님이 우물안의 개구리이기 때문입니다^^, 과학계, 데이터 과학, 빅테이터에서는 java 다음으로 많이 쓰는게 python입니다. 자신이 알고 산것만이 진리라는 것마냥. 고리타분한 안경은 벗으시길! 고인물에선 썩은 내가 나기 마련입니다^^
          대화보기
          • Oracle
            실무경력 13년차이고 오라클회사에 다니고 있습니다.
            언어에 집착하는 것은 별로 좋지 않은 것 같습니다. 각자 환경이 다르겠지만 pre-sales 하는 사람에게는 언어를 뛰어넘어서 프로그램 개발/시연 시간이 빠른 언어가 좋을 수 있습니다.

            C, Java, C#의 장단점을 알고 상황에 맞는 프로그램을 해야겠지요.
            닭잡는 곳에 소잡는 칼을 쓰면 불편하듯이...
          • 감사합니다.
          • 국제표준규격
            C나 C++, java, C# 언어만 쓰다가 웹개발을 위해 처음 javascript로 넘어왔을 때는 좀 어색하긴 했어도 무난히 적응할 수 있었는데 지금 보고 있는 python이나 ruby는 진짜.. 거지 같습니다. 파이썬 익히기 전에 파이썬이 간결하고 배우기 쉬운 언어라고 들었는데, 기존 문법들에 익숙한 저에게는 그냥 거지 같네요. 매우 거지 같습니다. this 안쓰려고 매개변수 저렇게 쓰는 것도 이상하고 변수 선언 안하고 쓰는 것도 똥싸고 안닦은 것 같고 변수형도 난잡하기 이를데 없고 클래스 매서드도 대체 저게 뭐야ㅜ switch case없는 것도 방금 알았는데 아, 정말..뛰어쓰기로 {}를 대신하는 것도 readable하기보단 unreadable하네요. 문장 끝에 ;넣지 않는 것도 코풀고 안닦은 것 같고.. 아! 옛날 gw-basic 수준이에요. 어떻게 이런 언어들이 인기를 끌고 라이브러리들이 많은 건지, 당췌 이해할 수가 없습니다.
            대화보기
            • JustStudy
              여기까지로 보았을때는 Python보다는 Ruby가 구조면에서 더 체계적으로 느겨집니다.
              고맙습니다
            • JustStudy
              고맙습니다
            • 해앵인
              클래스변수는 클래스 범위에서 동작하기 때문에 한번 초기화되면 그 이후부터는 초기화되지 않는다고 보는게 맞는 것 같아요!
              대화보기
              • yelpann@gmail.com
                같은 의문이 듭니다
                대화보기
                • 열정과 함께
                  루비에서 클래스를 정의할 때

                  @@Variable1 = 0

                  이렇게 해 버리면 클래스를 정의할 때마다 @@Variable1= 0 이 부분이 실행되면서 클래스 변수가 계속 초기화되는 게 아닌가요? 아니면 저 부분은 처음에 클래스 원형이 정의될 때만 실행되고 이후의 부분에서는 실행되지 않는건가
                • 구묵
                  보면 볼수록 재미있네요! c포자였는데 ㅎㅎ 파이썬은 적용도 쉽고 매력이 넘치는 것 같습니다!
                • ssmktr
                  파이썬에는 동적할당을 할수가 없나요?
                • Jaeyoon Kim
                  질문이 있습니다. 파이썬의 장식자함수는 바로 아래 이어서 오는 함수 하나에만 영향을 주는 건가요?
                • Frank
                  고맙습니다. ^^
                  여기까지 잘 따라 가고 있습니다.
                • jade
                  수업 잘봤습니다.
                  Python에서 문자열 안에 변수 표현하는게 C언어의 그것과 비슷하네요
                버전 관리
                egoing
                현재 버전
                선택 버전
                graphittie 자세히 보기