본문 바로가기

코딩 연습/코딩배우기164

[python] 파이썬 스태틱(static) 메서드와 클래스(class) 메서드 ■ 클래스의 인스턴스(객체)별로 존재하는 변수를 인스턴스 변수라고 하며, 인스턴스(객체)에 속하지 않고 클래스에 속한 변수를 클래스 변수라고 한다. class Simple: cv = 20 # 클래스 변수 def __init__(self): self.iv = 10 # 인스턴스 변수, 객체별로 존재 s = Simple() print(s.iv) # 10 / 인스턴스 변수는 객체를 통해 접근함 #print(Simple.iv) # AttributeError: type object 'Simple' has no attribute 'iv' # 클래스 변수는 클래스 이름으로 접근 가능 print(Simple.cv) # 20 # 객체를 통해서도 클래스 변수에 접근 가능 print(s.cv) # 20 # 접근하는 변수가 객.. 2020. 9. 17.
[python] 파이썬 데코레이터 (Decorator) ■ 파이썬 데코레이터 (Decorator)는 꾸며주는(덧붙여주는) 역할을 하는 함수 또는 클래스로써 클러저와의 차이점은 함수를 다른 함수의 인자로 전달한다는 점이다. 즉, 데코레이터 함수가 인자로 전달된 함수를 기능이 추가된 새로운 함수로 만들고 이 함수를 반환한다. def smile(): print('^_^') def confused(): print('@_@') # 위 함수들의 결과를 'emoticon!'이라는 글이 위, 아래에 위치하도록 꾸며줄 수 있다. def deco(func): # 데코레이터 함수 def wrap_func(): print('emoticon!') func() print('emoticon!') return wrap_func smile_deco = deco(smile) smile_de.. 2020. 9. 16.
[python] 파이썬 중첩함수(Nested Function)와 클로저(Closure) ■ 클로저(Closure)는 함수를 만들어서 반환하는 함수 - 파이썬의 함수도 개체이기 때문에 가능 def maker1(m): def inner(): # 함수 안에 정의된 함수(nested 함수) print('closure ' * m) return inner() # nested 함수 실행 후 반환 f1 = maker1(2) # closure closure print(f1) # None def maker2(m): def inner(): print('closure ' * m) return inner # nested 함수 반환 f2 = maker2(3) # print 함수 실행 X f2() # closure closure closure --> print('clouser ' * m) 실행, m의 값 참조 pri.. 2020. 9. 15.
[python] 파이썬 property객체, @property 데코레이터 ■ 파이썬의 내장 함수에 property가 있으며, 클래스 변수를 속성으로 선언하고 메소드를 get, set 인자로 받아 property 객체를 생성하고, getter, setter 기능을 수행토록 한다. class Natural: def __init__(self, n): self.set_n(n) # 아래의 setn 메서드 호출 def get_n(self): # getter return self.__n def set_n(self, n): # setter if n < 1: self.__n = 1 else: self.__n = n def main(): n1 = Natural(1) n2 = Natural(2) n3 = Natural(3) n1.set_n(n2.get_n() + n3.get_n()) print(.. 2020. 9. 14.
[python] 파이썬 __slots__의 효과 ■ 파이썬에서는 각 객체마다 해당 객체의 속성을 저장하기위해 __dict__을 사용하는데, __dict__은 그 형태로 인해 메모리를 많이 사용한다. 이로 인해 수백 수천개의 객체가 생성될 경우, 그에 상응한 수만큼 __dict__이 생성되어 시스템에 부담이 된다. # __slots__은 객체마다 생성되는 __dict__을 생성못하게 하여 메모리 효율성을 높이고, 객체의 속성(변수) 추가(생성)을 제한할 수 있다. class Point3D: __slots__ = ('x', 'y', 'z') # 속성(변수)를 x, y, z로 제한함 def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __str__(self): return '3D 좌표 : (.. 2020. 9. 14.
[python] 파이썬의 정보은닉(Information Hiding)과 __dict__ 메서드에 대해 ■ 파이썬의 객체 외부에서 객체 내에 있는 변수(속성)나 메서드를 수정할 수 없게 하기 위한 코딩 규칙은 attribute, method 앞에 밑줄('_', undercore) 하나를 붙이는 것이다. 그리고, __dict__ 메서드로 변수(속성)정보를 확인하고, 속성값을 수정할 수 있지만, 이를 제한하고 싶을 경우 밑줄 두 개를 붙이는 방법이 있다. # 변수(속성)값을 수정할 수 있다. (잘못된 접근과 값의 수정) class Person: def __init__(self, n, a): self.name = n self.age = a def __str__(self): return '{0}: {1}'.format(self.name, self.age) def main(): p = Person('James', .. 2020. 9. 13.
[python] 파이썬 __str__ 메서드에 대해 ■ 파이썬에서 어떤 값(또는 객체)을 문자열로 변환하는데 사용하는 str()은 내장 함수가 아닌 파이썬 내장 클래스이며, 객체를 만들고 그 객체의 정보(클래스 이름, 저장 위치 등)를 알고싶을 때 print(객체이름)를 사용하는데, 이는 object 클래스의 __str__ 메서드가 호출되어 반환된 문자열 정보이다. >>> str >>> >>> t = (1, 2, 3) >>> str(t) '(1, 2, 3)' >>> t.__str__() # == str(t) '(1, 2, 3)' >>> >>> >>> class Simple: ... def __init__(self): ... pass ... >>> s = Simple() >>> >>> print(s) >>> >>> s.__str__() # str(s)와 같.. 2020. 9. 13.
[python] 파이썬 __init__, __str__, __iter__, __next__ 등의 메서드 ■ 파이썬의 __init__, __str__, __iter__, __next__ 등의 메서드는 파이썬에 의해 호출되는 메서드로 스페셜 메서드라 한다. # 클래스에 스페셜 메서드 정의해보기 class Car: def __init__(self, id): self.id = id # 차량 번호 def __len__(self): return len(self.id) def __str__(self): return '차량 번호 : ' + self.id def __call__(self): print('__call__ 함수') def main(): c = Car('12가3456') c() # __call__ 메서드 호출 print(len(c)) # __len__ 메서드 호출 print(str(c)) # __str__ 메서.. 2020. 9. 12.
[python] 파이썬 파일 쓰기, 읽기 - open(), read(), readline(), readlines() ■ 파이썬 내장함수인 open()으로 파일 객체를 얻어서 파일을 생성하거나 쓰고, 읽을 수 있다. str1 = 'G2Bgo는 나라장터, 관공서입찰, 공공기관입찰, \ 군부대입찰 등의 경쟁입찰 건들에 대해 AI 분석을 통한 예정가격과 \ 낙찰률을 계산하며, 각 입찰공고 건에 대해 투찰을 할 수 있도록 \ 입찰금액을 제공해주는 입찰정보사이트입니다.' # 파일 쓰기 f = open('./g2bgo.txt', 'w') # 파일 객체 얻기 f.write(str1) f.close() # f는 # 파일 생성 'w' 모드는 기존 파일을 덮어쓴다. # (기존 파일 삭제 후 다시 생성 - 사용 시 주의 필요!!) # 파일객체 반복자(iterator)에 대해 for문으로 읽기 f = open('./g2bgo.txt') fo.. 2020. 9. 11.
[python] 파이썬 클래스 상속(inheritance) ■ 파이썬의 클래스 상속(inheritance) # 부모클래스가 갖는 모든 메서드가 자식클래스에도 담긴다. # 자식클래스에는 별도의 메서드를 추가할 수 있다. class Father: def run(self): print('so fast..!') class Son(Father): def jump(self): print('so high..!') def main(): s = Son() s.run() # so fast..! / 상속된 메서드 s.jump() # so high..! / 추가된 메서드 main() ■ 메서드 오버라이딩 # 상속 관계에서 부모클래스의 메서드와 동일한 이름의 메서드를 자식클래스가 정의하는 것 # 이 경우, 부모메서드는 보이지 않는 상태가 된다.(호출 불가 상태) class Father.. 2020. 9. 10.