● 클래스: 좀 더 큰 범위에서 반복을 할 때 유용
1. 전역변수 활용 global result
2. 독립적인 프로그램이 필요하나 많이 필요하게 되면 일일히 더 추가하기는 그러니...
- class 함수(여러 함수가 집합, 무한정으로 별개의 함수를 만들 수 있다)
ex)
class Calculator(클래스 이름): ##클래스 옆에 ()가 없다! def __init__(self): ##__init__ 메소드1 ##매개변수가 없어도 self 입력 self.result=0 ##클래스 안에 잇는 메소드 함수에서 변수를 지정할 때는 self.변수명=수식 or 입력 내용으로! def add(self,num): ## add 메소드2 ##매개변수의 가장 처음은 self를 무조건 입력하고 그 다음 다른 매개변수! self.result+=num return self.result
cal1=Calculator() ##Calculator 클래스로 만든 별개의 계산기 cal1,cal2(객체라고 한다.)cal2=Calculator() ##클래스를 사용하면 계산기 수가 늘더라도 객체를 생성만 하면 되기에 간단히 명령 수행
print(cal1.add(3)) ---> 이런 식으로 클래스에 있는 함수를 불러온다. ## 객체.함수
(예시)
- 메소드 호출 방법
먼저 인스턴스 명=클래스명() 을 하여 클래스 호출. 이후 인스턴스명.메소드명()으로 메소드 호출.
ex) a=counter() ##a라는 객체 생성 a.reset()
● 객체
- 객체지향프로그래밍: 우리가 살고 있는 실제 세계가 객체들로 구성되어있다.
- 객체는 상태와 동작을 갖는다.
상태(state)는 객체의 속성, ex) TV의 채널번호, 볼륨, 전원상태 -- 인스턴스 변수(필드)
동작(behavior)은 객체가 취할 수 있는 동작(기능)이다. ex) TV의 켜기, 끄기, 채널 변경, 볼륨 변경 -- 메소드
#클래스: 객체에 대한 설계도이다. 클래스로부터 만들어지는 각각의 객체를 그 클래스의 인스턴스라고 한다.
● 생성자: 객체가 생성될 때 객체를 기본값으로 초기화하는 특수한 메소드(객체끼리 독립적이긴하나 오류 감소를 위해)
class 클래스 이름:
def __init__(self,...): ##reset 메소드랑 동일하나, 객체가 생성되는 시점에서 자동으로 호출되는 차이가 있다.
##self.__age , self__name 형태로 쓰는 이유는 = 뒤에 있는 age, name과 구분하기 위해 일반적으로 __를 활용
self.__형태로 쓰는 연습을 하자
인스턴스명=클래스명 일때 매개변수에 self 필요없다. 메소드 호출할 때도 self 필요x
ex) 하나의 클래스로 많은 객체 생성
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")
ex) class 헷갈림 방지
#초기값을 0으로 해놓은 것. #여기서 name이랑 age를 받으면 뒤에 있는 메소드함수들한테도 전달이 된다. 그런데 print같은 건 없으니 obj=Student("Hong", 20)만 하면 매개변수 값 설정만 된 것.
class Student:
def __init__(self, name=None, age=0):
self.__name = name
self.__age = age
def getAge(self): #접근자: 출력용 #대체로 접근자와 설정자 모두 있는 편.
return self.__age
def getName(self):
return self.__name
def setAge(self, age): #설정자: 값 설정
self.__age=age
def setName(self, name):
self.__name=name
>>> obj=Student("Hong", 20)
>>> obj.getName()
결과: 'Hong'
- __str__메소드 ex) def__str__(self): str(a)+.....
ex) def __str__(self): return '(%d, %d, %s)' % (self.__speed, self.__gear, self.__color)
● Gui 프로그래밍 (그래픽사용자인터페이스)
- tkinter: 파이썬에서 GUI를 개발할 때 필요한 모듈
ex) 윈도우창, 버튼 디자인
- 버튼과 이벤트 처리 vs 버튼이 아닌 경우는 그냥 Label(윈도우이름, text="")
b1=Button(윈도우이름,text="문자열") ##버튼 설정
b1.pack ##버튼 배치
- 버튼 2개 이상이면 b1, b2,.. 만들면 된다. 다만, CSS처럼 수직으로 배열된다.
-->>> b1.pack(side=LEFT) b2.pack(side=LEFT) ..... 해주면 수평으로 배열된다.
pack(padx=숫자) 는 좌우여백을 숫자만큼 띄운다. pady는 위아래 여백
- 버튼의 텍스트 변경
b1["text"]="One" 을 적으면 기존 값에서 One 의 이름으로 버튼이 생성된다.
● 버튼과 이벤트의 연결
- 이벤트 처리는 메인프로그램에서(이벤트) 라이브러리 함수를 호출하고 콜백함수로 호출되는 것이다.
- button=Button(window, text="one", command=함수 이름) #함수를 호출하고 처리한다.
- 단순 위젯: ok, cancel 등 단순한 요소 -컨테이너: 위젯을 넣을 수 있는 상자
- 배치 관리자
(1) Grid
– 격자 배치 관리자(grid geometry manager)는 테이블 형태의 배치. row와 column을 사용한다.
(2) Pack
– 압축 배치 관리자(pack geometry manager)는 위젯들을 부모 위젯 안에 압축. 특별한 게 없다.
(3) Place
– 절대 배치 관리자(place geometry manager)는 주어진 위치에 위젯을 배치
- 색상
fg(전경, 글자 색깔), bg(배경) ex) button["fg"]="색깔" 혹은 Button(윈도위이름,text 문자열, bg="색깔") 도 가능
- 폰트
(폰트이름, 폰트의 크기, 폰트 스타일) 혹은 text문자열 뒤에 font="폰트이름 크기 스타일"도 가능
- 레이블의 색상과 폰트 변경하기
-- 그냥 Lable()설정 해놓은 걸 또 다른 Label()로 설정한다.
● 엔트리 위젯: 텍스트를 입력받거나 출력하기위한 기입창 생성
a=Entry(window)
a.grid(row=0,column=1) 로 하면 첫번째 행에서 entry 위젯 생성.
ex) 계산기 프로그램 ##eval()함수는 문자열로 입력된 수식을 계산해주는 역할!!
● 캔버스(그리기) # canvas=Canvas(window, width=, height=) 해준다!! : 캔버스 너비와 높이 설정.
- 캔버스 항목 ##create_ 옆에 붙일 것들
• 호(arc) ex) canvas.create_arc(10,10,200,150,extent(각도)=90, style=ARC)
• 비트맵(bitmap, 내장 파일이나 XBM 파일 형식)
• 이미지(image, BitmapImage나 PhotoImage 객체) • 직선(line) ##이미지를 불러오고나서 그린다.
ex) img=PhotoImage(file=-----) canvas.create_image(200,200,anchor=NW(북서쪽),image=img)
• 타원(oval, 원이나 타원)
• 다각형(polygon) -() 안에 첫번째 꼭짓점의 좌표, 두번째, 세번째,,,,,
• 사각형(rectangle)
• 텍스트(text) ex) canvas.create_text(100,100,text='sss')
• 윈도우(window)
● 예제
1. 은행 계좌
## 클래스에 매개변수가 없지만 메소드에는 매개변수가 있다.
##다 하고나서 return(print는 임시저장해놓은 거 출력하는 느낌, return은 저장 완료)
2. 사칙연산 클래스 만들기
class FourCal:
def __init__(self, first, second): self._first = first
self._second = second
def setdata(self, first, second):
self._first = first
self._second = second
def add(self):
result = self._first + self._second return result
def mul(self):
result = self._first * self._second return result
def sub(self):
result = self._first - self._second return result
def div(self):
result = self._first / self._second return result
2가지 호출 방법
(1) a=Fourcal() print(a.setdata(4,2)) (2) a=Fourcal(4,2) print(a.setdata())
3. 클래스로 프레임 감싸기
4. 애니메이션
# 화살표 키로 공을 움직이고 싶다면, for문 대신에 def move_right(event): canvas.move(id,5,0) 하고나서
canvas.bind_all('<KeyPress-Right>',move_right) 를 한다!! -Up, -Down, -Left 도 있다.
# 그리고 조건문에 입력된 것을 변수로 사용하고 싶다면 event.keysym=="Up"과 같은 조건문 활용
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python-파일, 라이브러리(필로우, Numpy, requests, pandas, Matplolib) (0) | 2021.06.16 |
---|
댓글