본문 바로가기

Python

[윤성우의 열혈 파이썬 중급편] 28. 정보 은닉과 __dict __ 출처 : 윤성우의 열혈 파이썬 : 중급 28. 정보 은닉과 __dict __ 속성 감추기 #person.py 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', 22) print(p) p.age -= 1 # 프로그래머의 실수 print(p) main() 오류가 발생한 근본적 원인은 객체 외부에서 객체 내에 있는 변수(속성)에 직접 접근하도록 내버려 두었기 때문이다 메소드 사용 #person2.py class Person: def __ini.. 더보기
[윤성우의 열혈 파이썬 중급편] 27. 연산자 오버로딩 출처 : 윤성우의 열혈 파이썬 : 중급 27. 연산자 오버로딩 # overloading.py class Account: def __init__(self, aid, abl): self.aid = aid self.abl = abl def __add__(self, m): self.abl += m print('__add__') def __sub__(self, m): self.abl -= m print('__sub__') def __call__(self): print('__call__') return str(self.aid) + ':' + str(self.abl) def main(): acnt = Account('James01', 100) a.. 더보기
[윤성우의 열혈 파이썬 중급편] 26. 스페셜 메소드 출처 : 윤성우의 열혈 파이썬 : 중급 26. 스페셜 메소드 t = (1, 2, 3) len(t) # t.__len__() itr = iter(t) # itr = t.__iter__() for i in itr: print(i, end = ' ') s = str(t) # s = t.__str__() __ name__ , __ len__ , __iter __ , __str __ 등 객체 생성 시 자동으로 호출되는 메소드 직접 그 이름을 명시하지 않고 다른 경로를 통해서 혹은 상황에 따라 자동으로 호출되는 메소드 클래스에 스페셜 메소드 정의하기 # car_special.py class Car: def __init__(self, id): self.id = id def __len__(self): r.. 더보기
[윤성우의 열혈 파이썬 중급편] 25. isintance 함수와 object 클래스 25. isintance 함수와 object 클래스 isinstance 함수 class Simple: pass s = Simple() isinstance(s, Simple) # True isinstance([1, 2], list) # True class Fruit: pass class Apple(Fruit): pass class SuperApple(Apple): pass sa = SuperApple() isinstance(sa, SuperApple) # True isinstance(sa, Apple) # True isinstance(sa, Fruit) # True 이 객체는 저 클래스의 객체인가? object 클래스 class Simple: pass isinstance(Simple(), object) #.. 더보기
[윤성우의 열혈 파이썬 중급편] 24. 상속 24. 상속 부모 클래스가 갖는 모든 메소드가 자식 클래스에도 담긴다 자식 클래스에는 별도의 메소드를 추가할 수 있다 class Father: def run(self): print("so fast!!!") class Son(Father): def jump(self): print("so high!!!") def main(): s = Son() s.run() s.jump() main() 다중 상속 class Father: def run(self): print("so fast!!!") class Mother: def dive(self): print("so deep!!!") class Son(Father, Mother): def jump(self): print("so high!!!") def main(): s .. 더보기
[윤성우의 열혈 파이썬 중급편] 23. 클래스와 객체의 본질 출처 : 윤성우의 열혈 파이썬 : 중급 23. 클래스와 객체의 본질 객체 안에 변수가 만들어지는 시점 class Simple: def seti(self, i): self.i = i def geti(self): return self.i s1 = Simple() s1.seti(200) # 이 때 객체 내에 변수 i 생성 s1.geti() # 200 s2 = Simple() s2.geti() # error 클래스의 기본 정의 : 클래스 내에 들어갈 변수와(데이터와) 메소드를(기능을) 결정하는 것 위의 클래스에는 메소드의 정의만 존재. 즉, 변수의 선언은 존재하지 않는다 파이썬은 객체에 필요한 변수를 알아서 생성해준다 객체 내에 변수가 생성되는 정확한 시점은 객체 내에서 새당 변수를 대상으로 대입 연산을 처음 .. 더보기
[윤성우의 열혈 파이썬 중급편] 22. 메소드 기반 문자열 조합 22. 메소드 기반 문자열 조합 기본적 사용 방법 fs = '{0}...{1}...{2}' ms = fs.format('Robot', 125, 'Box') '{2}...{1}...{0}'.format('Robot', 125, 'Box') '{}...{}...{}'.format('Robot', 125, 'Box') '{toy}...{num}...{item}'.format(toy = 'Robot', num = 125, item = 'Box') 인덱싱 연산을 추가하여 my = ['Robot', 125, 'Box'.. 더보기
[윤성우의 열혈 파이썬 중급편] 21. 표현식 기반 문자열 조합 21. 표현식 기반 문자열 조합 문자열 조합 s = 'I am ' + str(7) + ' years old' print(s) # 'I am 7 years old' String formatting expressions : '표현식'을 기반으로 문자열 조합 '_ %s%s __' % (value, value) 스타일 문자열 조합 String formatting method calls : '메소드 호출'을 통해 문자열 좋밯 '_ {}{} __'.format(value, value) 스타일 문자열 조합 표현식 기반 문자열 조합 s = 'My name is %s' % 'Yoon' s = .. 더보기
[윤성우의 열혈 파이썬 중급편] 20. enumerate와 문자열 비교 출처 : 윤성우의 열혈 파이썬 : 중급 20. enumerate와 문자열 비교 enumerate names = ['윤나은', '김현주', '장현지', '이진선', '박선주'] names.sort() dnames = {} i = 1 for n in names: dnames[i] = n i += 1 print(dnames) # {1: '김현주', 2: '박선주', 3: '윤나은' ...} eo = enumerate(names) for n in eo: print(n) # (0, '윤나은') \n (1, '김현주') \n ... for n in enumerate(name.. 더보기
[윤성우의 열혈 파이썬 중급편] 19. 정렬 기술 출처 : 윤성우의 열혈 파이썬 : 중급 19. 정렬 기술 리스트의 sort 메소드 ns = [3, 1, 4, 2] ns.sort() # 오름차순 ns.sort(reverse = True) # 내림차순 ns = [('Yoon', 33), ('Lee', 12), ('Park', 29)] def age(t): return t[1] # 나이 반환 # 매개변수 key에 함수 age를 전달 ns.sort(key = age) # 이름의 알파벳 역순으로 정렬 ns.sort(key = lambda t : t[1], reverse = True) # 문자열의 길이를 기준으로 names = ['Julia', 'Yoon', 'Steven'] .. 더보기