Python & Ruby

인스턴스 변수와 메소드

 

Ruby

class Cal
  def initialize(v1,v2)
    @v1 = v1
    @v2 = v2
  end
  def add()
    return @v1+@v2
  end
  def subtract()
    return @v1-@v2
  end
end
c1 = Cal.new(10,10)
p c1.add()
p c1.subtract()
c2 = Cal.new(30,20)
p c2.add()
p c2.subtract()
 

Python

class Cal(object):
    def __init__(self, v1, v2):
        self.v1 = v1
        self.v2 = v2

    def add(self):
        return self.v1+self.v2

    def subtract(self):
        return self.v1-self.v2


c1 = Cal(10,10)
print(c1.add())
print(c1.subtract())
c2 = Cal(30,20)
print(c2.add())
print(c2.subtract())

 

댓글

댓글 본문
작성자
비밀번호
  1. 닐반
    2018. 10. 13.
  2. 굽등굽등
    파이썬/루비 강의에서 제일 중요한 내용!
  3. 송형근
    감사합니다. 한 번 더 들어야겠어요.
  4. 유닉스가이
    감사합니다.
  5. 해릭
    180715 감사합니다.
  6. Ji Yeoun Park
    2018.06.30 감사합니다.
  7. Junbeom Jeong
    감사합니다.
  8. 김진우
    정말 이해 안되던 부분인데 이제 완벽하게 이해가 됐네요. 정말 감사합니다.
  9. 정병찬
    2018 06 01
    수강완료
  10. Jaeduk Jang
    완료했습니다. 감사합니다.
  11. 달콤한인삼
    강의 잘 봤습니다! 감사해요.
  12. 코딩잘하고싶어요 ㅎ
    파이썬에서 생성자 함수(__init__())의 문법은 __init__(instance(강의 중에서는 (self), value1, value2, .... )입니다.
    중요하진 않지만 여기서 self는 사용자가 직접 이름을 변경할 수 있습니다.(보통 self로 많이 씁니다.)

    self는 인스턴스 자체를 의미하는 특수한 변수입니다.

    클래스 외부에서 객체를 인스턴스화하여 특정한 변수에 담으면 그 변수를 통해 해당 객체에 있는 프로퍼티나 메소드에 접근할 수 있게 됩니다. (객체접근 연산자로는 .을 사용합니다.(이건 언어마다 다 다릅니다.))

    이와 마찬가지로 클래스 내부에서 해당 클래스가 속해있는 객체 자체에 접근하는 방법으로 self(인스턴스의 이름)를 사용한다고 보시면 됩니다.

    클래스 외부에서 인스턴스를 생성하자마자(객체를 인스턴스화 시키자마자) 자동적으로 실행되는 생성자 함수에 인자로 value1, value2, ...을 전달하면
    클래스 내부의 생성자 함수에는 그 지정한 값이 전달이 되겠지요.

    생성자 함수로 전달받은 값들을 다른 메소드에서 사용하기 위해서는 그 값의 소속을 해당 객체로 바꿔줘야 할 필요가 있습니다. 생성자 함수 내부에서 이 작업을 처리해주면 되는데, 생성자 함수의 첫 번째 파라미터인 인스턴스(의 이름)를 이용하시면 됩니다.

    이 때, self.v1 = v1 에서 self.v1이 객체 자체에 속해 있는 변수(프로퍼티)에 인자로 전달받은 v1이란 값을 할당하는 겁니다.

    결론적으로 self라고 하는 것은, 인스턴스 변수를 정의할 때 필요한 매개변수일 뿐이라는 말이 틀린 말은 아닙니다만,
    더욱 자세히 말씀드리자면, 해당 인스턴스 자체를 의미하며, 메소드에서 해당 객체에 접근할 때 사용하는 것
    이라는 느낌으로 알아두시면 되겠습니다.

    (저도 이 분야에 대해 경력이 굉장히 짧습니다. 너무 신뢰하시지는 마시고 다른 문서들을 많이 읽어보시는 걸 권장합니다.)
    대화보기
    • 코딩잘하고싶어요 ㅎ
      네 그렇습니다.
      대화보기
      • 성현아빠
        완료
      • GasOiline
        각 메소드에서 인스턴스변수를 사용할때 앞에 self를 붙여주는거 같아요
        지역변수는 다른 메소드에서 사용을 못하거든요
        그래서 self를 써서 인스턴스변수로 지정해서 다른 메소드에서 사용하게 만드는거죠
        대화보기
        • 장성수
          설명을 너무 잘해주셔서 많이 이해가 됩니다!! 감사합니다!!
        • GoldPenguin
          완료했습니다.
        • 김태윤
          완료했어요
        • J.Y.Oh
          설명을 정말 잘해주시네요. 항상 잘 정리가 됩니다. 감사합니다.
        • user1jena
          알듯말듯 조금씩 헷갈리네요ㅠㅠ여러번 보고 잘 익혀둬야겠어요.
        • 미림_likelion
          수강 완료했습니다. 감사합니다.
        • 심화평
          17.07.04 감사합니다~
        • 나만의 부
          2017.04.20 감사합니다~
        • 권수형
          다른 클래스의 변수와 구분하기 위함이라고 하니 이해가 쉽네요 감사합니다 ㅎ
          대화보기
          • 박원규
            self 는 같은 클래스 또는 같은 인스턴스 내부의 변수라고 생각하시면 될 것 같아요.

            다른 클래스의 변수와 구분하기 위함입니다.
            대화보기
            • 권수형
              강의중에서
              'self 라고 하는 것이 이 인스턴스를 가리키는 것' 이말이 잘 이해가 안되는 것 같네요
              그냥 표면적으로 self는 인스턴스 변수를 정의할때 필요한 매개변수일 뿐인 건가요??
            • Philip Oh
              감사합니다~ 두번 세번 봐야겠네요~
            • blackswan
              고맙습니다.
            • 이현정
              감사합니다
            • 나무87
              루비는 인스턴스 전체에서 사용할수 있는 인스턴스변수라고 정의하는 매개변수를 @ 미리정해준거고
              파이썬은 인스턴스 전체에서 사용할수 있는 인스턴스 변수라고 정의하는 매개변수를 생성자를 만들때 같이 정의해 준다는 차이 같은건가요?
            • 여호
              그럼 3~4번줄에서 v1, v2라는 변수를 내 클래스 안에 정의하고, 그 값으로 매개값으로 주어진 v1, v2를 대입하는 건가요?
            • JustStudy
              고맙습니다
            • user0123
              루비에서 @ 나오니까 약간 당황했는데
              다행히 모두 이해 되네요 ^^
            • 롱다리스머프
              잘 들었습니다. 감사합니다!
            • 구묵
              감사합니다! 루비와 파이썬, 두 언어가 접근하고자 하는 방식의 차이가 조금씩 보이는 것 같네요!
            • 지선
              감사합니다
              ~!!
            • 쮸쮸바
              귀에 쏙쏙 들어 오네요~
              감사합니다.
            • 검사무운
              잘 봤습니다. 감사합니다.
            • 자몽남
              감사합니다~ 항상 잘보고있습니다
            • Frank
              고맙습니다. ^^
            버전 관리
            egoing
            현재 버전
            선택 버전
            graphittie 자세히 보기