선발대

[스파르타] 파이썬 프로젝트3: class 연습문제 (기초) 본문

스파르타코딩클럽/활동 내용

[스파르타] 파이썬 프로젝트3: class 연습문제 (기초)

신선한 스타트 2021. 12. 21. 15:40
코딩 설명

 

(1) 직사각형 넓이, 둘레 구하기

 직사각형의 가로, 세로만 지정해서 직사각형을 생성하면, 멤버 메소드를 이용해 넓이와 둘레를 구할 수 있는 클래스를 작성하세요. (생성자, 넓이, 둘레 함수 총 3가지가 포함되어야함)

 

(2) 고양이, 강아지 클래스 만들기

 이름과 동물을 지정해서 인스턴스를 생성하는 동물이라는 클래스를 생성하고, 동물을 상속받아 고양이 클래스를 만들어 야옹을 출력하는 함수를 만들고, 동물을 상속받아 강아지 클래스를 만들어 왈왈을 출력하는 함수를 만들어주세요.

 

 

내가 작성한 코드, 모범답안

 

(1) 직사각형 넓이, 둘레 구하기

 

## 내가 작성한 코드

class box:
    def __init__(self, wid, len):
        self.wid = wid
        self.len = len
    def area(self):
        area = self.wid * self.len
        print(area)
    def perimeter(self):
        perimeter = (self.wid + self.len) * 2
        print(perimeter)

 

## 모범답안
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return (self.width + self.height) * 2

rec = Rectangle(2, 3)
print(rec.area())

 

후기

 

  • 생성자 개념은 꼭 중요하다. ex) 가로, 세로가 존재하긴 해. 나중에 인스턴스 생성하면 만들게: 생성자 역할
  • 클래스는 그냥 틀이므로 속성 값은 없음. 클래스 만들 때 값을 입력하는 건 잘못된 방식임.
  • self는 자기 자신을 가르킴. 
  • 함수에서 print로 보내지 말고, return을 이용해서 값을 반환하자.

 

 

(2) 고양이, 강아지 클래스 만들기

 

class animal:
    def __init__(self, name, sound):
        self.name = name
        self.sound = sound
    def who(self):
        print("나는", self.name, self.sound)

class cat(animal):
    def __init__(self):
        self.name = "고양이!"
        self.sound = "야옹!"

class dog(animal):
    def __init__(self):
        self.name = "강아지!"
        self.sound = "멍멍!"

 

## 모범답안

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def bark(self):
        return f'{self.name}은 왈왈'

class Cat(Animal):
    def meow(self):
        return f'{self.name}은 야옹'

dog1 = Dog('강아지')
print(dog1.bark())

cat1 = Cat('고양이')
print(cat1.meow())

 

후기

 

  • 상속은 위에 이미 적혀있다면 굳이 생성자를 작성할 필요는 없음.
  • 상속은 추가할 부분만 작성하면 된다.
  • 강아지, 고양이 둘 다 상속은 받았지만 각자 가지고 있는 함수가 다르다.
  • 문제를 초반에 잘못 이해한 것 같다. 그냥 동물의 종류만 받으면 됐다.
  • 함수를 return 할 때 f-string 을 이용할 수 있다. 
  • 클래스 내의 멤버에 값을 넣지 말자. 클래스는 틀이라고 생각.
Comments