클래스
  • 클래스 개념
  • 생성자, 소멸자
  • self
  • 네임스페이스 (namespace)
  • 클래스에서의 getter / setter 사용
  • 클래스 변수(class variable) vs 인스턴스 변수(instance variable)
  • 인스턴스 메서드 & 클래스 메서드 (class method) & 정적 (static) 메서드
  • 상속 / super

 

 

클래스
  • 빵을 만드는 틀" 개념
  • 객체(object) : 클래스를 통해 만들어진 빵의 개념
  • 객체와 인스턴스 차이
    • 같은 것이나 누구 관점에서 부르르냐의 창
    • object = Test()  
      • object 는 객체라고 부르며, Test 는 클래스라고 부름
      • Test 클래스 관점에서 부르면 object는 Test의 인스턴스라고 함
    • 인스턴스 : 클래스를 실체화한것. 즉, 클래스로 객체화 한것을 인스턴스라고함
  • 메소드 : 클래스 내 함수
  • 클래스 생성 시, 대문자로 작성
# class 생성

class Person:
	pass
    
p = Person()	# 객체 생성
  • 객체를 생성하면 아래 그림과 같이 클래스와 객체가 각자 고유의 메모리 공간을 가짐

  • p.data = 3 입력 시, 아래와 같이 p 객체 공간에 {"data":3} 을 딕셔너리 형태로 저장함. 

 

생성자 (constructor), 소멸자
  • 생성자 : 클랙스 객체 생성 시 자동으로 실행되는 것. 초기값 설정 시 사용
  • 소멸자 : 클래스 인스턴스가 소멸될 때 자동으로 호출되는 함수. 일반적으로 잘 사용하지 않음
  • self   :  클래스 인스턴스, 아래의 경우, self 는 test 가 됨
# 생성자, 소멸자

class Test:
	def __init__(self, name, age):	# 생성자
    	self.name = name
        self.age = age
    
    def __del__(self):
    	print('소멸자')
    

# 객체 생성
test = Test('JS', 23)

# 객체 접근
print(test.name)
print(test.age)

 

 

self
  • 클래스 내의 인스터스를 의미함
class Foo:
    def func1():
        print(f'func1')

    def func2(self):
        print(id(self))
        print(f'func2')
        

f1 = Foo()
# f1.func1()  # error
f1.func2()

print(id(f1))   # f1 instance 주소와 self의 주소가 같음

 

 

네임스페이스
  • 변수가 객체를 바인딩할 때 그 둘 사이의 관계를 저장하는  공간을 의미함
  • 파이썬 클래스는 새로운 타입(객체)을 정의하기 위해 사용되며, 모듈과 마찬가지로 하나의 네임스페이스를 가짐

 

클래스에서의 getter / setter 사용
  • 클래스의 데이터를 직접 변경하는 것은 좋지 않음. 즉, 간접적으로 조작하는 것이 좋음 (get, set 사용)
  • 파이썬에는 private, public 개념이 없음
  • 아래 코드에서 그냥 get, set 함수를 사용하면 여전히 사용이 가능함
  • @property , @age.setter 데코레이터를 사용하여 코드를 작성하는 것이 좋음
  • 앞 언더바 2개 사용 
    • 외부에서 클래스 속성값에 접근하지 못하도록 할때
    • 오바라이딩 방지용
class Test:
	def __init__(self, name, age):
    	self.__name = name
        self.__age = age
 	
    def get(self):
        return self.__name, self.__age
    
    def set(self, name, age):
        self.__name = name
        self.__age = age
        
    @property
    def age(self):
        return self.__age


    @age.setter
    def age(self, age):
        self.__age = age
    
    
    
# 객체 생성
test = Test('JS', 11)

# 직접 변경
test.name = 'SJ'
test.age = '22'
 
# get
name, age = test.get()
print(name, age)

# set
test.set('JS', 33)
name, age = test.get()
print(name, age)


# property
print(test.age)	# getter
test.age = 20	# setter

test.name = 'DH'	#  변경 안됨

 

 

클래스 변수(class variable) vs 인스턴스 변수(instance variable)
  • 클래스 변수
    • 여러 인스턴스 간에 서로 공유해야하는 값은 클래스 변수를 사용
  • 인스턴스 변수
    • self 가 붙어있는 변수
class Account:
    num_account = 0		# class variable
    def __init__(self, name):
    	self.name = name	# intance variable
        Account.num_account += 1
        

kim = Account('kim')
lee = Account('lee')

 

인스턴스 메서드 & 클래스 메서드 (class method) & 정적 (static) 메서드
  • 인스턴스 메서드
    • 클래스에 아무 데코레이터 없이 선언된 메서드
    • 첫번째 매개 변수로 클래스의 인스턴스가 넘어옴 (= self)
  • 클래스 메서드
    • @classmethod 데코레이터를 사용하여 선언
    • 첫번째 매개 변수로 클래스 인스턴스가 아닌 클래스 자체가 넘어옴 (= cls)
    • cls 를 사용해 클래스 속성에 접근하거나 클래스 메서드를 호출 할 수 있음
    • 인스턴스 메서드와 달리 다른 인스턴스 속성에 접근하거나 다른 인스턴스 메서드를 호출하는 것은 불가능함.
    • 팩토리 메서드를 작성할 때 유용함
  • 정적 메서드
    • @staticmethod 데코레이터 사용하여 선언
    • 첫번째 매개 변수가 할당 되지 않음
    • 클래스의 일부로 선언할 필요 없지만 비슷한 메서드를 하나의 클래스에 두고 싶을때 사용
    • 정적 메서드 내에서는 인스턴스, 클래스 속성에 접근하거나 호출하는 것이 불가능
class Test:
    object_count = 0    # class variable
    
    def __init__(self, age):
        self.age = age
        
        Test.object_count += 1

    # instance method
    def add(self, age):
        return self.age + age
    
    # class method
    @classmethod
    def count(cls):
        return cls.object_count

    # static method
    @staticmethod   
    def static(name):
        print(name)


# instance method
test = Test(10)
print(test.age)

# class method
t1 = Test(10)
print(t1.count())
t2 = Test(20)
print(t2.count())

# static method
t2.static('static')

 

 

상속 / super
  • 부모 클래스(parent class, super class), 자식 클래스(child class, sub class) 
  • 메소드 오버라이딩 (method overriding)
    • 부모 클래스의 메소드를 자식 클래스에서 재정의 하는것
  • 파이썬은 다중상속이 가능함(c++가능, C#, Java 불가능)
# parent class
class Parent:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def showParent(self):
        print(self.name, self.age)

# child class
class Child(Parent):    # 상속
    def __init__(self, name, age):
        super().__init__(name, age)     # parent class init() 상속
        
    
    def showChild(self):
        super().showParent()    # method oeverriding
        print('child show')


p = Parent('JS', 10)
p.showParent()

c = Child('TT', 20)
c.showParent()  # 부모 클래스 함수도 사용 가능
c.showChild()

 

 

추상 클래스 (abstract class)
  • 추상 클래스는 메서드의 이름만 존재하는(메서드 구현 없이) 클래스
  • 부모 클래스에 메서드만을 정의하고, 이를 상속 바은 클래스가 해당 메서드를 구현하도록 강제하기 위해서 사용함
# parent class
class Car:
	@abstracmethod
    def drive(self):
    	pass
        
        
class K5(Car):
	def drive(self):
    	print('k5 drive')


car_k5 = K5()

 

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 딕셔너리  (0) 2022.12.12
[ Python Tutorial ] 튜플  (1) 2022.12.10
[ Python Tutorial ] 리스트  (0) 2022.12.09
[ Python Tutorial ] 문자열  (0) 2022.12.08
[ Python Tutorial ] Print 출력  (0) 2022.12.07

딕셔너리

  • 리스트와 같이 값 변경, 추가 가능
  • 별 표현식
    • 데이터 언패킹은 데이터 개수가 같아야 하지만 star expression 을 사용하면 변수의 개수가 달라도 언패킹이 가능함

 

딕셔너리 생성
# 딕셔너리 생성

# 빈 딕셔너리 생성
dict = {}

# 생성
data = {'d1' : 1,
        'd2' : 2,
        'd3' : 3}
        
# 추가
data['d4'] = 4


# get data --> key 값으로 가져옴
print(data['d2'])		# 2


# 값 변경
data['d2'] = 4
print(data['d2'])		# 4


# 값 삭제
del data['d2']
print(data)		#


# value 여러개
data = {'d1' : [1, 10],
        'd2' : [2, 20],
        'd3' : [3, 30]}
        
 
 # 인덱싱
 print(data['d1'][0])	# 1
 print(data['d1'][1])	# 10
 
 
  # 딕셔너리 추가
 print(data['d1'][0])	# 1
 print(data['d1'][1])	# 10

 

 

 

keys 메서드, values 메서드,   update 메서드,  zip과 dict
  • keys     -   key 값만 가져옴
  • values   -   value 값만 가져옴
  • zip    - key, value 쌍을 묶어줌
data = {'d1', 1, 'd2', 2, 'd3', 3, 'd4', 4}

# keys
key = list(data.keys())		# [d1, d2, d3, d4]


# values
values = list(data.values())	# [1, 2, 3, 4]


# update
data2 = {'d5', 5, 'd6', 6}

data2.update(data)
print(data2)		# {'d1', 1, 'd2', 2, 'd3', 3, 'd4', 4, 'd5', 5, 'd6', 6}



# zip
keys = {'t1', 't2', 't3'}
vals = {100, 200, 300}
print(zip(keys, vals))		# zip 형태로 출력됨
print(dict(zip(keys, vals)))		# dictionary 형태로 형변환 해줌

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 클래스  (0) 2022.12.26
[ Python Tutorial ] 튜플  (1) 2022.12.10
[ Python Tutorial ] 리스트  (0) 2022.12.09
[ Python Tutorial ] 문자열  (0) 2022.12.08
[ Python Tutorial ] Print 출력  (0) 2022.12.07

튜플

  • 리스트 - 순서가 있으며 수정 가능
  • 튜플 - 순서가 있으나 수정 불가능

 

튜플 생성
# 튜플 생성

test1 = ('d1', 'd2', 'd3)
print(test1) 	# ('d1', 'd2', 'd3')

# 괄호 없이 생성 가능
test1 = 1, 2, 3
print(test1) 	# ('d1', 'd2', 'd3')

# 한개만 생성 시
test2 = ('1', )		# test2 = ('1') 으로 생성하면 integer 가 됨
print(test2)		# ('1')

 

 

 

range 함수
  • 범위를 지정하는 함수
# range 함수

data = tuple(range(2, 100, 2)
print(data)			# (2, 4, 6, 8, 10, ... 100)

 

 

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 클래스  (0) 2022.12.26
[ Python Tutorial ] 딕셔너리  (0) 2022.12.12
[ Python Tutorial ] 리스트  (0) 2022.12.09
[ Python Tutorial ] 문자열  (0) 2022.12.08
[ Python Tutorial ] Print 출력  (0) 2022.12.07

리스트

  • 문자열과 달리 수정이 가능함
  • 리스트끼리의 덧셈 연산을 하면 모든 원소들이 합쳐짐

 

append,   insert 
  • append   -  리스트에 원소 추가 메서드. 맨 뒤에 추가
  • insert    -   리스트 원하는 위치에 원소 추가
data = [1,2,3,4,5]

# append
data.append(6)
print(data)		# [1,2,3,4,5,6]


# insert - (원소 위치, data)
data.insert(1, 0)
print(data)		# [1,0,2,3,4,5,6]

 

del
  • 리스트 원소 삭제
# del

data = [1,2,3,4,5]
del data[2]
print(data)		# [1,2,4,5]

 

join
  • 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수
# join

data = ['a', 'b', 'c', 'd']


# 구분자 " " 
str = " ".join(data)	
print(str)		# a b c d

# 구분자 "." 
str = ".".join(data)	
print(str)		# a.b.c.d

 

 

sort, sorted
  • 리스트를 오름차순으로 정렬
  • sort   - 원본 리스트 변경하여 정렬
  • sorted   - 원본 리스트는 변경 없이 정렬
# sort

data = [2,3,5,1,4,9]

# sort
data.sort()
print(data)		# [1,2,3,4,5,9]


# sorted
data2 = sorted(data)
print(data2)	# [1,2,3,4,5,9]

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 클래스  (0) 2022.12.26
[ Python Tutorial ] 딕셔너리  (0) 2022.12.12
[ Python Tutorial ] 튜플  (1) 2022.12.10
[ Python Tutorial ] 문자열  (0) 2022.12.08
[ Python Tutorial ] Print 출력  (0) 2022.12.07

문자열

  • 문자열의 경우, 생성되면 변경 불가 
string = 'hello'

# 변경 안됨
string.replace('h', 'H')	

# 변경 가능. 다시 binding 해줘야함
string = string.replace('h', 'H')

 

 

문자열 인덱싱(indexing)

 

# indexing
str = hello

# 첫번째 문자
print(str[0])

# 세번째 문자
print(str[2])

# 마지막 문자
print(str[-1])

# 마지막 문자만 빼고
print(str[:-1])

 

문자열 슬라이싱(slicing)

string [start:end:step]   

str = hello world

# 전체 출력
print(str)

# world 출력
print(str[6:10])
print(str[6:])
print(str[-5:])

# slicing [start : end : step]
print(str[::2])
print(str[1::2])
print(str[:4:2])

# 문자열 뒤집기
print(str[::-1])

 

replace 함수 - 문자열 변환
string = '111,222,333,444'

# , 를 - 으로 변경
string1 = string.replace(',', '-')
print(string1)

 

split함수 - 문자열 자르기
str = '111.222.333.444'

# 333
print(str.split('.')[2])

# 444
print(str.split('.')[-1])

 

 

문자열 연산
# 문자열 더하기
a = '1'
b = '2'
print(a + b)	# 12

# 문자열 곱하기
print('hello' * 3)	# hellohellohello

 

 

strip 함수 - 공백 제거 함수
str = ' 11 22 33 44 55'


# 공백 제거
str = str.strip()
print(str)			# 1122334455

 

 

upper, lower, capitalize 메서드
  • upper  - 대문자로 변경
  • lower   - 소문자로 변경
  • capitalize   -  앞글자만 대문자로 변경
# upper

str = 'hello'
str = str.upper()
print(str)		# HELLO


# lower

str = 'HELLO'
str = str.lower()
print(str)		# hello


# capitalize

str = 'hello'
str = str.capitalize()
print(str)		# Hello

 

 

endswith, startswith
  • endswith   -   파일명의 확장자를 확인하는 메서드
  • startswith  -   파일 시작을 비교하는 메서드
# endswith

file = 'test.xlsx'
print(file.endswith('xlsx'))	# True return


# startswith

file = 'test11.xlsx'
print(file.startswith('test11'))	# True return

 

 

 

split
  • 문자열을 자르는 함수 
# spllit

data = '11-22-33-44'
print(data.split('-'))	# ['11', '22', '33', '44']	list 형태로 반환

 

 

 

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 클래스  (0) 2022.12.26
[ Python Tutorial ] 딕셔너리  (0) 2022.12.12
[ Python Tutorial ] 튜플  (1) 2022.12.10
[ Python Tutorial ] 리스트  (0) 2022.12.09
[ Python Tutorial ] Print 출력  (0) 2022.12.07

Print 출력 

 

"sep = "  : 여러개 문자들을 구분하여 출력하는 법 
# test_1 test_2 test_3 출력
print('test_1 ', 'test_2 ', 'test_3 ')

# test_1;test_2;test_3 출력
print('test_1', 'test_2', 'test_3', sep=';')

 

"end= "  : print 함수의 경우, \n 자동 줄바꿈이 디폴트로 되어있음. end=" " 설정 시, 줄바꿈 없음
# 자동 줄바꿈
print('test_1')
print('test_2')

# 줄바꿈 없이 출력
print('test_1', end="")
print('test_2', end="")

 

 

한줄에 여러개의 코드를 작성하고 싶을때, ; (세미콜론을) 붙여서 한줄에 써줌
# 한줄에 한명령어
print('test_1')
print('test_2')


# 한줄에 여러 명령어 사용시, 
print('test_1'); print('test_2')

 

 

format 
# format 사용

name = 'lee'
age = 20

print('my name is {} and age is {}'.format(name, age))

'Python Tutorial' 카테고리의 다른 글

[ Python Tutorial ] 클래스  (0) 2022.12.26
[ Python Tutorial ] 딕셔너리  (0) 2022.12.12
[ Python Tutorial ] 튜플  (1) 2022.12.10
[ Python Tutorial ] 리스트  (0) 2022.12.09
[ Python Tutorial ] 문자열  (0) 2022.12.08

+ Recent posts