관리 메뉴

bright jazz music

파이썬 클래스 생성자 과제 본문

Language/python

파이썬 클래스 생성자 과제

bright jazz music 2022. 5. 15. 14:26
#2차원 상의 한 좌표점 나타내기

#2차원 상의 한 좌표점 (x, y)를 객체로표현하라.
#다음과 같이 객체를 생성할 수 있도록 하라.

#p1 = Point() #좌표값(0, 0)을 나타내는 객체 생성
#p2 = Point(2, 3) #좌표값(2, 3)을 나타내는 객체 생성

#현재 객체의 좌표값을 (x, y) 형식의 문자열로 출력하는 메서드 show()를 제공하라
#p2.show() #화면에 (2, 3)과 같이 출력


#다음과 같이 새로운 좌표값을 설정하는 메서드 set()을 제공하라
#p1.set(1, 2) #p1의 좌표값을 (1, 2)로 설정
#p1.show()      #화면에 (1, 2) 출력

#객체가 갖고 있는 좌표값을 튜플로 반환하는 메서드 get()을 제공하라

#x, y = p2.get()
#print(f'x={x}, y={y}')




#클래스 선언부
class Point :
   
    #생성자
    def __init__(self, x=None, y=None) :
        
        # __x, __y로 속성 비공개 처리
        #x, y가 none이면 0으로 초기화.
        #x, y 값이 존재할 경우 매개변수 값으로 초기화
        
        if x is None:
            self.__x = 0
        else:
            self.__x = x

        if y is None:
            self.__y = 0
        else:
            self.__y = y

    
    def show(self):
        print(f'({self.__x}, {self.__y})')
        #클래스 인스턴스 내부에서는 비공개 속성 접근 가능


    def set(self, x=None, y=None) :
        #클래스 인스턴스 내부에서 비공개 속성 변경
        
        if x is None:
            self.__x = 0
        else:
            self.__x = x

        if y is None:
            self.__y = 0
        else:
            self.__y = y

    def get(self) :
        #튜플 선언과 동시에 반환
        return (self.__x, self.__y)
    
 

#주프로그램부

p1 = Point() #매개변수 값 없이 초기화
p2 = Point(2, 3) #매개변수 입력 후 초기화

print('p1 ==>', end='')
p1.show()

print('p2 ==>', end='')
p2.show()

print()

p1.set(1, 2) #set 함수를 사용해 은닉 값 변경
print('p1.set(1,2) ==>', end='')
p1.show()

p2.set(4, 5) #set 함수를 사용해 은닉 값 변경
print('p1.set(4,5) ==>', end='')
p2.show()


print()

#get 함수를 사용해서 튜플값을 각각의 변수에 담기

x1, y1 = p1.get()
print(f'p1 tuple ==> x={x1}, y={y1}')


x2, y2 = p2.get()
print(f'p2 tuple ==> x={x2}, y={y2}')




#p1 ==>(0, 0)
#p2 ==>(2, 3)

#p1.set(1,2) ==>(1, 2)
#p1.set(4,5) ==>(4, 5)

#p1 tuple ==> x=1, y=2
#p2 tuple ==> x=4, y=5

 

 

#직사각형 클래스 과제
#Point 클래스를 사용해서 직사각형의 정보 나타내기


# Point 클래스 선언부
class Point :

    def __init__(self, x=None, y=None) :
        
        if x is None:
            self.__x = 0
        else:
            self.__x = x

        if y is None:
            self.__y = 0
        else:
            self.__y = y

    
    def show(self):
        print(f'({self.__x}, {self.__y})')


    def set(self, x=None, y=None) :
        
        if x is None:
            self.__x = 0
        else:
            self.__x = x

        if y is None:
            self.__y = 0
        else:
            self.__y = y


    def get(self) :
        return (self.__x, self.__y)


# Rectangle 클래스 선언부
class Rectangle :

    # 생성자
    def __init__(self, lx,ly, rx,ry) :
        self.__lt = Point(lx, ly)
        self.__rb = Point(rx, ry)
        
    # 사각형  정보 보여주기
    def show(self): 
        print(f'좌측 상단 꼭지점이 {self.__lt.get()}, 우측 하단 꼭지점이 {self.__rb.get()}인 사각형입니다.')

    # 절대값 구하는 메서드
    def absolute_value(self, val): 
        if val < 0 :
            val = 0 - val
        return val    

    # 너비 구하는 메서드
    def getWidth(self): 
        p1 = self.__lt.get()
        p2 = self.__rb.get()
        
        
        width = self.absolute_value(p2[0] - p1[0]) #절대값 처리
               
        return width

    #높이 구하는 메서드
    def getHeight(self): 
        p1 = self.__lt.get()
        p2 = self.__rb.get()
    
        
        height = self.absolute_value(p1[1] - p2[1]) #절대값 처리
           
        return height
    
    #면적을 구하는 메서드
    def getArea(self):
       
        area = self.getWidth() * self.getHeight()
        
        return area


    def getPerimeter(self):
        
       perimeter = 2 * (self.getWidth() + self.getHeight())

       return perimeter
        



    

#주프로그램부

rec = Rectangle(5,5,20,10)
rec.show()

width = rec.getWidth()
print(f'사각형의 너비 : {width}')

height = rec.getHeight()
print(f'사각형의 높이 : {height}')

area = rec.getArea()
print(f'사각형의 넓이 : {area}')

perimeter = rec.getPerimeter()
print(f'사각형의 둘레 : {perimeter}')


print()



#테스트 2

rec = Rectangle(1,1,4,5)
rec.show()


width = rec.getWidth()
print(f'사각형의 너비 : {width}')

height = rec.getHeight()
print(f'사각형의 높이 : {height}')

area = rec.getArea()
print(f'사각형의 넓이 : {area}')

perimeter = rec.getPerimeter()
print(f'사각형의 둘레 : {perimeter}')





#좌측 상단 꼭지점이 (5, 5), 우측 하단 꼭지점이 (20, 10)인 사각형입니다.
#사각형의 너비 : 15
#사각형의 높이 : 5
#사각형의 넓이 : 75
#사각형의 둘레 : 40

#좌측 상단 꼭지점이 (1, 1), 우측 하단 꼭지점이 (4, 5)인 사각형입니다.
#사각형의 너비 : 3
#사각형의 높이 : 4
#사각형의 넓이 : 12
#사각형의 둘레 : 14

 

 

 

 

 

 

'Language > python' 카테고리의 다른 글

GUI 예제  (0) 2022.05.24
복합자료형(compound data type):리스트  (0) 2022.04.30
반복문 과제  (0) 2022.04.23
반복문(while, for)  (0) 2022.04.23
220409 조건문, 반복문  (0) 2022.04.09
Comments