728x90
반응형
SMALL
from pandas import Series, DataFrame
import pandas as pd
# class 생성
class Person:
info = '' # instance 변수로 하는게 더 깔끔할 듯!
def showinfo(self, name, age): # 형식매개변수
self.info += '이름 : {}, 나이 : {} \n'.format(name, age) # \n(엔터키) 은 print를 사용해야 효과
# man 인스턴스화
man = Person() #인스턴스화
man.info
man.showinfo('홍길동', 30)
man.info
man.showinfo('박찬호', 20) # 추가 정보(누적)
print(man.info)
# woman 인스턴스화
woman = Person() #인스턴스화
woman.info
woman.showinfo('고애신', 21)
woman.info
woman.showinfo('이양화', 22)
print(woman.info)
# global 변수, 공유 가능성
class Person:
hobbys = [] # global variable, 공유가 됨, self.hobbys 로 하여도 글로벌변수로 사용
def add_hobbys(self, arg):
self.hobbys.append(arg)
# p1 인스턴스화
p1 = Person()
p1.hobbys
p1.add_hobbys('야구보기')
p1.hobbys
p1.add_hobbys('만화책보기') # 정보 추가(누적)
p1.hobbys
# p2 인스턴스화
p2 = Person()
p2.add_hobbys('런닝') # p1의 누적 정보도 같이 보임, 주의해야 할 지점!
p2.hobbys
★ (주의) 리스트 변수가 global variable 가 된다!
# 해결방안) 리스트 변수를 instance variable 로 생성해야 한다면
class Person:
def __init__ (self): # 인스턴스 메소드
self.hobbys = [] # instance variable
def add_hobbys(self, arg):
self.hobbys.append(arg)
# p1 인스턴스화
p1 = Person() # __init__ (self) 에만 허용.
p1.hobbys
p1.add_hobbys('야구보기')
p1.hobbys
p1.add_hobbys('만화책보기') # 정보 추가(누적)
p1.hobbys
# p2 인스턴스화
p2 = Person()
p2.add_hobbys('런닝')
p2.hobbys
# __init__ (self) : 형식매개변수를 적용했을 경우
class showinfo:
def __init__ (self, arg1, arg2): # 형식매개변수 선언 -> 인스턴스화 했을 경우, 값을 지정해줘야 한다
self.name = arg1 # self.arg1 = arg1 도 가능
self.age = arg2
def printinfo(self):
print('이름 : {}, 나이 : {}'.format(self.name, self.age))
# __init__ 메소드에 형식매개변수가 구성되어 있으면 클래스를 인스턴스화 할때 꼭 실제값을 입력해야 한다
s = showinfo('홍길동', 20)
s.printinfo()
s1 = showinfo('제임스', 30)
s1.printinfo()
s2 = showinfo() # 실제값을 지정해주지 않아 오류발생
# 인스턴스화된 변수명.__dict__ : 네임스페이스 확인
s.__dict__ # 입력값 확인
s1.__dict__
# __str__ : return 값 출력, 인스턴스를 print() 또는 str() 하면 수행되는 메소드 이다.
class showinfo:
def __init__ (self, arg1, arg2): # 형식매개변수 선언 -> 인스턴스화 했을 경우, 값을 지정해줘야 한다
self.name = arg1 # self.arg1 = arg1 도 가능
self.age = arg2
def __str__(self): # print 메소드
return '이름 : {}, 나이 : {}'.format(self.name, self.age)
# s1 인스턴스화, 호출
s1 = showinfo('홍길동', 20)
s1.name
s1.age
print(s1)
str(s1)
# __repr__ : 인스턴스를 print() 또는 str() 하면 수행되는 메소드 이다.
class showinfo:
def __init__ (self, arg1, arg2): # 형식매개변수 선언 -> 인스턴스화 했을 경우, 값을 지정해줘야 한다
self.name = arg1 # self.arg1 = arg1 도 가능
self.age = arg2
def __repr__(self): # print 메소드
return '이름 : {}, 나이 : {}'.format(self.name, self.age)
s1 = showinfo('홍길동', 20)
s1.name
s1.age
print(s1)
str(s1)
# 클래스 안에 __repr__, __str__ 같이 있을 경우에 __str__ 수행 된다.
class showinfo:
def __init__ (self, arg1, arg2): # 형식매개변수 선언 -> 인스턴스화 했을 경우, 값을 지정해줘야 한다
self.name = arg1 # self.arg1 = arg1 도 가능
self.age = arg2
def __repr__(self): # print 메소드
return '2. 이름 : {}, 나이 : {}'.format(self.name, self.age)
def __str__(self): # print 메소드
return '1. 이름 : {}, 나이 : {}'.format(self.name, self.age)
s1 = showinfo('홍길동', 20)
s1.name
s1.age
print(s1)
str(s1)
# self 지시어 유무
class Test:
def test_1(): # 클래스 메소드
print('클래스 함수')
def test_2(self): # 인스턴스 메소트
print('인스턴스 함수')
# class method, instance method
t1 = Test() # 인스턴스화
t1.test_2()
t1.test_1() # 클래스 함수이기 때문에 인스턴스를 통해서 수행하면 오류발생
Test.test_1() # 클래스 함수이기 때문에 클래스를 통해서 수행해야 한다.
Test.test_2() # 인스턴스 함수이기 때문에 인스턴스를 통해서 수행해야 한다. 오류발생
# datetime 확인
import datetime
datetime.datetime.now() # 클래스 메소드(함수), 글로벌
# 문제: cnt(인스턴스 변수) 값이 초기화가 되고 있다. 인스턴스화 될때 카운팅은 초기화가 된다
class Employee:
cnt = 0 # 글로벌 변수
def __init__(self, arg1, arg2):
self.name = arg1
self.age = arg2
self.cnt += 1 # 인스턴스 변수
def show(self):
print('이름 : {}, 나이: {}'.format(self.name, self.age))
def showcnt(self):
print('전체 접속한 인원은 {}명 입니다'.format(self.cnt))
# 문제확인
e1 = Employee('홍길동', 20)
e1.show()
e1.showcnt()
e2 = Employee('손흥민', 25)
e2.show()
e2.showcnt() # 문제) 카운팅 초기화
# 해결: cnt를 글로벌 변수로 변환 -> 클래스명.변수명 ex) 유튜브 라이브방송 카운트 추가
class Employee:
cnt = 0 # 맨 처음 인스턴스화 되었을 때만 적용
def __init__(self, arg1, arg2):
self.name = arg1
self.age = arg2
Employee.cnt += 1 # global, class 변수로 변환
def show(self):
print('이름 : {}, 나이: {}'.format(self.name, self.age))
def showcnt(self):
print('전체 접속한 인원은 {}명 입니다'.format(Employee.cnt))
# 인스턴스화 및 문제해결
e1 = Employee('홍길동', 20)
e1.show()
e1.showcnt()
e2 = Employee('손흥민', 25)
e2.show()
e2.showcnt()
e1.showcnt()
e3 = Employee('나얼', 25)
e3.show()
e3.showcnt()
# 인스턴스 종료. ex) 유튜브 라이브방송 카운트 차감
class Employee:
cnt = 0 # 맨 처음 인스턴스화 되었을 때만 적용
def __init__(self, arg1, arg2):
self.name = arg1
self.age = arg2
Employee.cnt += 1 # global, class 변수로 변환
def show(self):
print('이름 : {}, 나이: {}'.format(self.name, self.age))
def showcnt(self):
print('전체 접속한 인원은 {}명 입니다'.format(Employee.cnt))
def __del__(self): # 인스턴스 해지할 때, 메모리 삭제
print('{} 접속해지 했습니다.'.format(self.name))
Employee.cnt -= 1
# del 인스턴스
e1 = Employee('홍길동', 20)
e1.show()
e1.showcnt()
e2 = Employee('손흥민', 25)
e2.show()
e2.showcnt()
e1.showcnt()
e3 = Employee('나얼', 25)
e3.show()
e3.showcnt()
del e3 # 인스턴스 해지, 종료
e1.showcnt()
e2.showcnt()
del e2 # 인스턴스 해지, 종료
e1.showcnt()
# 모듈화
if __name__ == '__main__':
lst1 = [1,2,3,4,5,4,2,1]
lst2 = [4,5,6,8,7,4,9]
s = Set()
print('union', s.union(lst1, lst2))
print(s.union_all(lst1, lst2))
print(s.intersect(lst1, lst2))
print(s.minus1(lst1, lst2))
print(s.minus2(lst1, lst2))
# 파일명이 모듈명
import sys
sys.path
sys.path.append('C:\\mypython')
sys.path
new = set.Set()
print(new.union(lst1, lst2))
print(new.union_all(lst1, lst2))
print(new.intersect(lst1, lst2))
print(new.minus1(lst1, lst2))
print(new.minus2(lst1, lst2))
728x90
반응형
LIST