본문 바로가기
반응형

클래스13

[파이썬 클래스] 원본 변수가 바뀌는 경우 해결 (copy 함수를 사용해야 하는 이유) 아래 코드를 봅시다. 어떻게 동작하는지 먼저 이해해봅시다. class add : def __init__(self,lst): self.lst=lst.append(5) a=[1,2,3,4,5] mcls=add(a) 위 코드는는 a를 [1,2,3,4,5,5] 으로 바꾸고 mcls.list 에는 아무것도 저장되지 않습니다. 결과는 아래와 같습니다 . >>> a [1, 2, 3, 4, 5, 5] >>> mcls.list list.append(5) 의 결과가 none 이기 때문입니다. 클래스 안의 def 에서 변수를 입력받을 때 참조해서 가져오기 때문에 append 를 적용하면 원본인 a가 바뀝니다. 변수를 참조가 아닌 복사해서 가져오는 방법은 아래와 같습니다. copy 함수를 사용하면 됩니다. class add .. 2023. 5. 25.
[파이썬] 함수는 입력되는 변수를 참조로 가져온다 (copy함수의 사용) 아래 코드를 봅시다. def add(lst) : lst.append(6) a=[1,2,3,4,5] add(a) 이 코드에서 a를 출력하면 무엇이라고 나올까요? 아래와 같은 결과가 나옵니다. >>> a [1, 2, 3, 4, 5, 6] 함수에 변수가 입력되면 변수를 참조해서 가져오기 때문에 원래 변수가 변하게 됩니다. 변수를 참조하지 않고 가져오려면 아래와 같이 copy 함수를 사용해야 합니다. def add(lst): new_lst = lst.copy() # 또는 new_lst = list(lst) new_lst.append(5) return new_lst a = [1, 2, 3, 4, 5] result = add(a) 결과는 아래와 같습니다. >>> a [1, 2, 3, 4, 5] 2023. 5. 25.
[파이썬 클래스] 원본 변수가 바뀌는 경우 해결 (copy 함수를 사용해야 하는 이유) 아래 코드를 봅시다. 어떻게 동작하는지 먼저 이해해봅시다. class add : def __init__(self,lst): self.lst=lst.append(5) a=[1,2,3,4,5] mcls=add(a) 위 코드는는 a를 [1,2,3,4,5,5] 으로 바꾸고 mcls.list 에는 아무것도 저장되지 않습니다. 결과는 아래와 같습니다 . >>> a [1, 2, 3, 4, 5, 5] >>> mcls.list list.append(5) 의 결과가 none 이기 때문입니다. 클래스 안의 def 에서 변수를 입력받을 때 참조해서 가져오기 때문에 append 를 적용하면 원본인 a가 바뀝니다. 변수를 참조가 아닌 복사해서 가져오는 방법은 아래와 같습니다. copy 함수를 사용하면 됩니다. class add .. 2023. 5. 25.
[파이썬 클래스와 객체지향] 7. 객체지향 3단계 4강에서 작성한 코드를 객체지향 형태로 바꿔봅시다. 4강에서 작성한 코드는 아래와 같습니다. mylist=[] mnum=0 #def usem() while True : print() #한 줄 띄기 print('Adding member : press a') print('searching member : press b') print('using membership coupon : press c') action=input('press button ') if action=='a' : print() #한 줄 띄기 #inputs name = input('enter your name? ') name = name.lower() # force lowercase age = int(input('enter your age? .. 2023. 5. 24.
[파이썬 클래스와 객체지향] 6. 객체지향 2단계 3강에서 작성한 코드를 객체지향 형태로 바꿔봅시다. 3강에서 작성한 코드는 아래와 같습니다. mylist=[] mnum=0 #def usem() while True : print() #한 줄 띄기 print('Add member : press a') print('search member : press b') action=input('press button ') if action=='a' : print() #한 줄 띄기 #inputs name = input('enter your name? ') name = name.lower() # force lowercase age = int(input('enter your age? ')) sex = input('enter your sex? ') sex = sex.low.. 2023. 5. 24.
[파이썬 클래스와 객체지향] 5. 객체지향 1단계 우리는 지난시간까지 절차지향 방법을 이용하여 헬스장 회원관리 코드를 작성해보았습니다. 2강에서 가장 간단한 형태의 코드를 작성하고 3강과 4강에서 기능을 추가했습니다. 이번 시간부터 클래스를 사용한 객체지향 프로그래밍을 해볼 것입니다. 2,3,4 강의 예제를 객체지향형태로 수정해볼 것입니다. 이번 시간에는 2강의 예제를 객체지향 형태로 수정해봅시다. 2강에서 만든 코드는 아래와 같습니다. mylist=[] while True : print() #한 줄 띄기 #inputs name = input('enter your name ') name = name.lower() # force lowercase age = int(input('enter your age ')) sex = input('enter your s.. 2023. 5. 24.
[파이썬 클래스] 메소드들의 순서가 상관 없는 이유 파이썬에서는 메소드들의 정의 순서를 고려하지 않아도 됩니다. 예를 들어, A 메소드에서 B 메소드를 호출하는 경우에도 A 메소드를 정의한 이후에 B 메소드를 정의해도 문제 없이 동작합니다. 아래는 예시입니다. class MyClass: def A(self): self.B() print("A 메소드 실행") def B(self): print("B 메소드 실행") obj = MyClass() obj.A() 이는 파이썬 인터프리터가 클래스를 처리할 때, 클래스의 모든 메소드를 먼저 메모리에 로드하고, 그 후에 실행하기 때문입니다. 따라서 메소드 내에서 다른 메소드를 호출하더라도 해당 메소드가 이미 메모리에 로드되어 있기 때문에 문제없이 실행됩니다. 2023. 5. 19.
[파이썬] 에러를 발생시키는 방법 (raise) 에러를 발생시킬 때는 raise 라는 명령어를 사용합니다. 사용 방법은 크게 세 가지가 있습니다. 1. 파이썬에서 미리 정의된 클래스 사용 파이썬에서는 예외 처리를 위해 아래와 같은 클래스를 정의해놓았습니다. ValueError: 값이 적절하지 않을 때 발생하는 예외입니다. TypeError: 연산이나 함수 호출 등에서 예상한 데이터 타입과 다른 형식의 객체를 사용할 때 발생하는 예외입니다. NameError: 정의되지 않은 변수나 함수를 사용하려고 할 때 발생하는 예외입니다. IndexError: 리스트, 튜플 등의 시퀀스에서 인덱스가 범위를 벗어날 때 발생하는 예외입니다. KeyError: 딕셔너리에서 존재하지 않는 키를 사용하려고 할 때 발생하는 예외입니다. FileNotFoundError: 파일을.. 2023. 5. 17.
[파이썬 클래스와 객체지향] 2. 절차지향 1단계 이번 시간부터 '헬스장 회원등록 예제' 코드를 함께 작성할 것입니다. 2,3,4 강에서는 절차지향 방식으로 코드를 작성하고 5,6,7 강에서 클래스를 도입하여 객체지향 방식으로 코드를 수정해 볼 것입니다. 아래 세가지 조건을 만족하는 코드를 짜면 됩니다. 1) 헬스장 회원의 이름, 나이, 성별, 회원권 횟수를 입력받는 코드를 작성하시오. 2) input 을 사용하여 정보를 입력받으시오 3) 입력받은 정보는 dict 형태로 저장하고, 각 회원의 dict 는 list 안에 저장하시오 전체 코드를 보여드리고 각각을 자세히 설명하는 방식으로 진행하겠습니다. mylist=[] while True : print() #한 줄 띄기 #inputs name = input('enter your name ') name = .. 2023. 5. 16.
[파이썬 클래스와 객체지향] 1. 어떻게 공부할 것인가? 아래 글을 읽고 클래스의 아주 기초적인 개념은 이해하신 상태라고 가정하고 수업을 진행하겠습니다. https://pybasall.tistory.com/358 [파이썬] 클래스와 객체지향 정말 쉽게 이해하기 클래스와 객체지향 프로그래밍 클래스는 리스트나 딕셔너리 처럼 데이터를 편하게 관리하기 위해 고안된 도구입니다. 그 성능이 워낙 강력해서 패러다임이 등장하기까지 했습니다. 클래스를 pybasall.tistory.com 본 수업에서는 한가지 예제를 통해서 파이썬 클래스와 객체지향이 무엇인지 공부해보려고 합니다. 객체지향과 반대되는 것이 절차지향인데요. 코딩을 처음 배우시는 분들은 절차지향 방식을 먼저 배우게 됩니다. 그러다가 클래스라는 것을 배우고 나면 객체지향으로 코딩을 할 수 있게 되는데요. 이 수업에서.. 2023. 5. 16.
[파이썬] 클래스에 정의된 인스턴스 변수 보는 법 (vars) 아래와 같은 클래스를 하나 정의합시다. class mycle : def __init__(self): self.name='hi' self.age=15 self.weight=75 인스턴스를 하나 만들어줍시다. model1=mycle() 인스턴스 변수는 아래와 같이 확인합니다. >>> vars(model1) {'name': 'hi', 'age': 15, 'weight': 75} 2023. 5. 11.
[파이썬] 문자열도 클래스다 (리스트,튜플,딕셔너리도) 파이썬에서 제공하는 문자열도 클래스입니다. 우리가 문자열을 정의하면, 문자열이라는 instance 가 만들어지는 것입니다. 문자열 클래스에 정의되어 있는 메소드들을 우리가 정의한 문자열에 사용할 수 있습니다. 문자열을 하나 정의해봅시다. mystr='HiHello' type 함수를 적용해봅시다. >>> type(mystr) str 이라는 class 라고 반환합니다. str 클래스에 있는 lower 메소드를 사용해봅시다. >>> mystr.lower() 'hihello' 문자열 뿐만 아니라 파이썬에서 제공하는 자료구조인 리스트,튜플,딕셔너리도 클래스입니다. 2023. 5. 11.
[파이썬] 클래스 만드는 방법 파이썬에서 클래스를 만드는 방법은 아래와 같습니다. 이해를 돕기 위해 변수를 몇개 정의하였습니다. class 클래스 이름 : def __init__(self,param1,param2,...) self.name='hi' #입력값 없이 정의해도됨 self.age=param1 #변수 이름과 입력값 이름 달라도됨 def 함수이름1(self,param1,param2,...) 파이썬 클래스의 특징을 살펴봅시다. 1) 클래스 이름은 CamelCase 로 짓는 것이 관례임. 2) __init__ 은 initialize 의 약어임. 초기화한다는 의미로, 변수들의 초기값을 지정하는 역할을 함. 3) __init__ 이 맨 위에 와야하는 것은 아님, 아래와 같은 구성도 가능. class mycle : def myfun1(s.. 2023. 5. 11.
반응형