PYTHON

python - 클래스 - 생성자, 비교, 더하기

미스털이 사용자 2021. 9. 3. 15:47
반응형

이번 시간엔 생성자, 비교, 더하기 등등 클래스 내 재밌는 기능을 알아보겠습니다.

 

1) 생성자

이전시간에 만든 Human객체에는 power, weight, height라는 클래스변수가 있었습니다. 근데 이 클래스변수가 모든 사람마다 같을 순 없습니다.

어떤 사람은 power 수치가 높을 수 있고 weight, height역시 저마다 다를 것입니다.

이것을 아예 객체 생성할 때 쉽게 선언하는 방법이 없을까요?

생성자는 이 문제를 잘 해결해줄 수 있습니다. 이 생성자 메소드를 이용해 객체 선언과 동시에 각각의 클래스 변수를 설정할 수 있게 해주니까요.

 

예를 들어보겠습니다.

#생성자
class Human :
	power = 100
	weight = 100
	height = 100
 
	def eat(self) :
		self.weight += 20
 
	def train(self) :
		self.weight -= 5
		self.power += 20
 
	def sleep(self) :
		self.weight -= 5
		self.height += 10	
 
class Student(Human) :
	name = '무명'
	age = 100
	gender = '성별'
 
	def __init__ (self, tmp_name, tmp_age, tmp_gender) :
		self.name = tmp_name
		self.age = tmp_age
		self.gender = tmp_gender
	
	def study(self) :
		print('공부한다')
		self.power+=20
	
	def stat(self) :
		print(f'나는 {self.age}살 {self.name} ({self.gender})입니다.')
		print('power :', self.power)
		print('weight :', self.weight)
		print('height :', self.height)
		print('')
 
	
man1 = Student('김개똥', 123, '남자')
woman1 = Student('마복례', 234, '여자')
 
#man1의 생활과 결과
man1.eat()
man1.eat()
man1.sleep()
man1.study()
man1.stat()
 
#woman1의 생활과 결과
woman1.train()
woman1.train()
woman1.train()
woman1.stat()

(19행) 보시다시피 기본 클래스변수는 '무명', 100, '성별'로 설정되어있습니다.

(23행) 하지만 __init__이란 생성자를 선언해서 클래스변수를 바꿔보겠습니다.

결과는 다음과 같습니다.

 

2) __add__, __lt__

아주 잘 쓰이는 기능인지는 잘 모르지만 알아두면 좋을 것 같아 적었습니다.

#비교, 덧셈
class Shape :
	area = 0
	def __add__(self, other) :
		return self.area + other.area
 
	def __lt__(self, other) :
		return self.area < other.area
		
a = Shape()
a.area = 15
b = Shape()
b.area = 25
 
print(a + b)
 
if( b > a ) : 
	print('b가 a보다 더 넓어요.')

(4행) area라는 클래스변수값을 +연산을 쓰면 더해지게끔 구현했습니다.

=>이것을 15행처럼 나타내면 __add__가 호출되면서 계산됩니다.

(7행) area의 값을 비교해서 __lt__(lt = less than, 즉 other보다 작게 나타낸 것을 return값으로 취함)함수에 맞게 나타냈습니다.

=> 17행에서 부등호 비교를 하면 __lt__가 호출되면서 참인지 거짓인지 결과가 나옵니다.

결과는 다음과 같아요.

 

반응형