자바에서와는 달리, 파이썬과 루비에서는 생성자의 이름이 클래스의 이름과 다르다.
이미 약속되어있는 생성자의 이름이 존재한다. 하지만 객체를 생성할 때 생성자가 호출(인스턴스의 초기화를 위해)된다는 개념은 동일하다
클래스명 : Cal
자바에서는 new Cal(); 를 통해, "Cal 객체를 생성(new)하는데 Cal() 생성자로 초기화하겠다" 라는 의미를 갖는데,
파이썬과 루비에서는 Cal.new() 또는 Cal()를 호출하면, Cal 객체가 생성되면서 내부에서 initalize() 생성자가 호출된다.
Ruby :
루비는 모듈에서와 마찬가지로, 클래스의 이름 첫 글자는 대문자로 시작해야한다.
그리고 마찬가지로 end로 끝내준다. 이쯤되면 모든게 end로 끝내는 구조인 것 같다.
class Cal
def initialize(v1, v2) # 생성자. 생성자의 이름이 initialize로 약속되어있음.
p v1, v2
end
c = Cal.new(10, 20)
end
+ ruby에는 puts 말고도 p 라는 간단한 이름의 출력함수가 있고, p 는 puts보다 더 자세히 출력해준다.
Python :
파이썬은 꼭 첫글자가 대문자일 필요는 없다.
object 구문은 나중에 살펴본다.
그리고 파이썬은 마찬가지로 거의 모든 헤드가 : 로 끝내는 것 같다.
class Cal(object):
def __init__(self, v1, v2): # 생성자. 생성자의 이름이 __init__로 약속되어있음. self가 존재(=this)
print(v1, v2)
c = Cal(10, 20)
+ 파이썬에서는 인스턴스 변수를 나타내기 위해 self를 사용하는데, 이를 위해 모든 메소드를 정의해줄 때 첫번째 인자가 self로 사용된다.
+ 결과적으로 c 변수와 self 변수는 같은 인스턴스를 가리키는 상태.
Ruby :
골뱅이를 붙이면 인스턴스 변수를 뜻한다.
class Cal
def initialize(v1, v2) # 생성자. 생성자의 이름이 initialize로 약속되어있음.
p v1, v2
@v1 = v1
@v2 = v2
end
def add()
return @v1 + @v2
end
def subtract()
return @v1 - @v2
end
end
c = Cal.new(10, 20)
p c.add()
p c.subtract()
initalize 안에서의 v1 v2는 지역변수기 때문에, 다른 메소드에서든 사용할 수 없으니 인스턴스 변수에 담아준다.
Python :
class Cal(object):
def __init__(self, v1, v2):
print(v1, v2)
self.v1 = v1
self.v2 = v2
def add(self):
return self.v1 + self.v2
def subtract(self):
return self.v1 - self.v2
c = Cal(10, 20)
print(c.add())
print(c.subtract())
참고
opentutorials.org/ - 이고잉님
'[Python & Ruby]' 카테고리의 다른 글
[Python & Ruby] 상속 (0) | 2020.12.28 |
---|---|
[Python & Ruby] 객체와 변수 (0) | 2020.12.27 |
[Python & Ruby] 객체 지향 프로그래밍 (0) | 2020.12.22 |
[Python & Ruby] Module (0) | 2020.12.20 |
[Python & Ruby] Block in Ruby (0) | 2020.12.18 |