[프로그래밍 언어]/python

두근두근 파이썬(개정판)_ch 13 객체와 클래스

우당탕탕 개발 일지 2024. 1. 28. 07:32

안녕하세요. 우당탕탕 개발 일지입니다.

파이썬 에디터 IDLE 3.12.1을 사용합니다.

책과 수업 내용을 바탕으로 요약한 내용과 교재 뒤 연습문제입니다.

 

 

  • 객체와 클래스
  • 생성자와 상속

 

1.객체와 클래스

1-1 객체(object)

=대상물.

=하나의 물건

=data+code.

=속성(attribute)과 동작(action).

=속성(attribute)+메서드(method)

=함수와 변수를 하나의 단위로 묶을 수 있는 방법.

( ※객체가 처음에는 잘 이해가 안 될 수도 있습니다. )

 

1-2 클래스(class)

클래스(Class)→객체 생성(object)

:클래스 =객체를 찍어내는 틀

두근두근 파이썬(개정판)

 

  •  멤버 변수 =객체의 속성을 나타내는 변수
  • 멤버 함수 or 메소드 =객체의 동작, 행동
💡 함수(function)와 메소드(method)는 다르다.  메소드는 매개변수가 있어야 한다. 

 

 

1-3

클래스에서 메서드의 첫 번째 매개변수는 반드시 self로 지정해야 한다.

class Car:
	def drive(self):
	self.speed = 10


myCar = Car()
myCar.color = "blue"
myCar.model = "E-Class"
myCar.drive() # 객체 안의 drive() 메소드가 호출된다. 
print(myCar.speed)

 


2. 생성자

  • __init__  : 객체의 속성을 초기화시킨다.   (우리가 호출하지 않으면 객체가 생성될 때 자동으로 호출된다.)
  • __str__  : 객체 자체를 출력할 때 형식을 정해주는 메소드이다.
class Car:
	def __init__(self, speed, color, model):
			self.speed = speed
			self.color = color
			self.model = model

def drive(self):
		self.speed = 60
		dadCar = Car(0, "silver", "A6")
		momCar = Car(0, "white", "520d")
		myCar = Car(0, "blue", "E-class")

 

상속

  • 클래스를 정의할 때 부모 클래스를 지정하는 것이다.
  • 자식 클래스는 부모 클래스의 내용을 물려받아서, 부모 클래스의 메소드와 변수들을 사용할 수 있다.

 

연습문제 ch13-2

class TV:
    def __init__(self):
        self.channel=1
        self.volume=5
        self.on=False
       

    def __str__(self):
        temp="on:"+str(self.on)+"\n"+ "channel:"+str(self.channel)+"\n" +"volume:"+str(self.volume)
        return temp
        
            
    def Turnon(self):
        self.on=True
        print("tv가 켜졌습니다. ")
    def Turnoff(self):
        self.on=False
        print("tv가 꺼졌습니다.")
        
    def setchannel(self,ch):
         if self.on==True:
             self.channel=ch
    def setvolume(self,vol):
        if self.on==True:
            self.volume=vol
            

mytv=TV()
mytv.Turnoff()
mytv.setchannel(11)
mytv.setvolume(6)
print(mytv,"\n")

mytv.Turnon()
mytv.setchannel(11)
mytv.setvolume(6)
print(mytv)

 


연습문제 ch13-4

import tkinter as tk
import random
import time



class Ball:
    def __init__(self,c,s,x,y):
        self.xs=random.randint(1,10)
        self.ys=random.randint(1,10)
        self.x=x
        self.y=y
        self.color=c
        self.size=s
        self.ball=canvas.create_oval(
            self.x-self.size/2,
            self.y-self.size/2,
            self.x+self.size/2,
            self.y+self.size/2,fill=self.color)
        
    def move(self):
            self.x += self.xs
            self.y += self.ys
            if self.x-self.size/2 <0 or self.x +self.size/2>500:
                self.xs *= -1
            elif self.y-self.size/2 <0 or self.y +self.size/2>300:
                self.ys *= -1
            canvas.delete(self.ball)
            self.ball=canvas.create_oval(
                self.x - self.size/2,
                self.y - self.size/2,
                self.x + self.size/2,
                self.y + self.size/2, fill=self.color)

w=tk.Tk()
w.geometry("500x300")
f=tk.Frame(w)
canvas=tk.Canvas(f)
f.pack(expand=True)
canvas.pack(expand=True)

        
        
balls=[]

for i in range(10):
        r=random.randint(0,255)
        g=random.randint(0,255)
        b=random.randint(0,255)
        color=f"#{r:02x}{g:02x}{b:02x}"
        aball=Ball(color,random.randint(20,100),
                    random.randint(1,500),
                    random.randint(1,300))
        balls.append(aball)


while True:
    for aball in balls:
        aball.move()
       
    canvas.update()
    time.sleep(0.01)

w.mainloop()
728x90