728x90
클래스 - class
- 파이썬 클래스는 class 키워드를 사용하여 자신만의 데이터타입을 만들 수 있음
class Person:
# 파이썬 클래스에서 __init__메서드나 생성자 역할을 수행 => 인스턴스가 만들어 질때 한번만 호출함
def __init__(self, name):
self.name = name
print(self.name + ' is initialized')
# 1번 메서드
def work(self, company): # 클래스내에 메서드의 첫번째 인수를 self로 반드시 기술해야함
print(self.name + 'is working in ' + company)
# 2번 메서드
def sleep(self):
print(self.name + 'is sleeping')
# Person instance 2개 생성
obj = Person('Park')
# method들
obj.work('ABCDEF')
obj.sleep()
# obj.name을 보면 알수 있듯이, 속성에 직접 접근함 => 파이썬에서는 기본적으로 모두 public
print('current person object is ', obj.name)
'''
Park is initialized
Parkis working in ABCDEF
Parkis sleeping
current person object is Park
'''
- class내에서 정의된 변수는 기본적으로 전역변수로 사용 및 classmethod의 기능
class Person:
# class variable => 해당 클래스로 생성되는 모든 인스턴스가 공통으로 사용되는 변수
count = 0
def __init__(self, name):
self.name = name
Person.count +=1
print(self.name + ' is initialized')
def work(self, company):
print(self.name + 'is working in ' + company)
def sleep(self):
print(self.name + 'is sleeping')
@classmethod # =>classmethod으로 표시를 하면 객체 인스턴스를 의미하는 self 대신 cls라는 클래스를 의미하는 파라미터인수로 전달받음
def getCount(cls): # cls를 받아 class에서의 count값을 return 시킴
return cls.count
obj1 = Person('Park')
obj2 = Person('Kim')
obj1.work('ABCDEF')
obj2.sleep()
# obj.name을 보면 알수 있듯이, 속성에 직접 접근함 => 파이썬에서는 기본적으로 모두 public
print('current person object is ', obj1.name,", ", obj2.name)
# count 를 출력하는 2가지 방법
print('Person count => ',Person.getCount())
print(Person.count)
'''
Park is initialized
Kim is initialized
Parkis working in ABCDEF
Kimis sleeping
current person object is Park , Kim
Person count => 2
2
'''
Private variable와 Private method
class PrivateMemberTest:
def __init__(self, name1, name2):
self.name1 = name1
self.__name2 = name2 # private member variable
print('initialized with',name1, name2)
def getNames(self):
self.__printNames() # private 메서드여도 public인 getNames으로 호출하면 호출됨
return self.name1, self.__name2
def __printNames(self): # private member method
print(self.name1, self.__name2)
# 인스턴스 생성
obj = PrivateMemberTest('Park','Kim')
print(obj.name1)
print(obj.getNames())
# print(obj.__printNames()) # error, __printNames 메서드는 private으로 설정되어있어서 직접 접근할수 없다.
# print(obj.__name2) # error
클래스 내에 method나 variable이 private(__) 으로 설정되어있는 경우 직접접근을 할수 없다. 단, private이 안되있는 public 인스턴스(getNames)로 직접 접근이 아닌 간접 접근을통해 사용할수있다.
외부에서 가져온 함수이름과 클래스 메서드 이름이 같을경우
def print_name(name):
print("[def] ", name)
class SameTest:
def __init__(self):
pass
def print_name(self, name):
print("[SameTest] ",name)
def call_test(self):
print_name('3번')
self.print_name('4번')
obj = SameTest()
print_name('1번')
obj.print_name('2번')
obj.call_test()
'''
[def] 1번
[SameTest] 2번
[def] 3번
[SameTest] 4번
'''
외부 함수와 클래스메서드의 이름이 같은경우 => 그냥 사용할경우 함수가 출력함 반면에, self. or 인스턴스. 을 사용하면 클래스 메서드가 출력함
with 구문
일반적으로 파일 또는 세션을 사용하는 순서는 다음과 같다
open() => read() 또는 write() => close()
그러나 python에선 with 구문을 사용하면 명시적으로 리소스 close()를 해주지 않아도 자동으로 close 해주는 기능이 있음. with 블록을 벗어나는 순간 파일이나 세션등의 리소스를 자동으로 close 시킴
=> 딥러닝 프레임워크인 TensorFlow의 session 사용시 자주 사용됨
# 일반적인 방법
f = open("./file_test", 'w')
f.write("Hello, Python !!!")
f.close
# with 구문을 사용한 방법
with open("./file_test", 'w') as f:
f.write("Hello, Python !!!")
728x90
'프로그래밍 > python' 카테고리의 다른 글
[python] Generator 나만의 정리 (0) | 2020.12.12 |
---|---|
python을 활용한 웹 크롤링 (0) | 2020.08.23 |