반응형
인스턴스에 소속되어있는 인스턴스 멤버가 아닌
클래스에 소속되어있는 클래스 멤버에 대해 알아보자.
[ 클래스 메소드 ]
Python :
class Cs:
@staticmethod
def static_method():
print("Static method")
@classmethod
def class_method(cls): # 인스턴스메소드에 self가 필요하듯이 인자 하나를 넣어줘야한다.
print("Class method")
def instance_method(self):
print("Instance method")
i = Cs()
Cs.static_method()
Cs.class_method()
i.instance_method()
파이썬에서는 클래스 소속 메소드로 '클래스 메소드'와 '스태틱 메소드'가 있다.
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() 오류발생
루비에서 클래스 멤버는 클래스적인 접근으로만 가능하고, 인스턴스 멤버는 인스턴스적인 접근으로만 가능한 것을 알 수 있다.
[ 클래스 변수 ]
class Cs:
count = 0 # 이제알았다.. 이게 인스턴스 변수가 아니라 클래스 변수였다.
def __init__(self):
Cs.count = Cs.count + 1 # 메소드에서 접근할 때엔 Cs.을 찍어준다.
@classmethod
def getCount(cls): # classmethod 메소드에는 첫번째 인자로 cls값을 받는데, 이건 클래스를 가리킨다. (staticmethod도 클래스 소속이지만, 이렇게 인자를 받진 않는다)
return Cs.count # 즉, Cs.count = cls.count 둘은 동일하다. (self=자바의this의 '의도'랑 동일한데, 객체가 아닌 클래스 단위라는것)
i1 = Cs()
i2 = Cs()
i3 = Cs()
i4 = Cs()
print(Cs.getCount())
파이썬에서 클래스 내부 && 메소드 외부 위치에 정의하는 변수는 '클래스 변수'다
클래스 변수는 클래스명을 붙이지 않고 그냥 작성하며, 메소드에서 접근할 때엔 클래스명.변수 로 접근해줘야한다.
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()
루비에서 인스턴스 변수는 @변수명 이고 클래스 변수는 @@변수명 이다.
그리고 파이썬에서는 클래스메소드나 스태틱메소드에 @classmethod @staticmethod를 붙여줘서 소속을 명시해주는데 비해
루비에서는 이렇게 클래스명.메소드명 으로 정의해준다.
+ 클래스변수 이해를 위한 그림참고
출처 - opentutorials.org/
반응형
'[Python & Ruby]' 카테고리의 다른 글
Python 크롤링 - 1 / 라이브러리 종류 (0) | 2022.11.17 |
---|---|
[Python] 파이썬 여러 조건 정렬 (0) | 2021.09.20 |
[Python & Ruby] 상속 (0) | 2020.12.28 |
[Python & Ruby] 객체와 변수 (0) | 2020.12.27 |
[Python & Ruby] 클래스/객체 생성 (0) | 2020.12.24 |