파이썬 Basic - class

Soonyoung Kim·2021년 1월 6일
0

1. Class(클래스)

  • class 키워드를 사용하여 자신만의 데이터 타입을 만들 수 있다.
class 클래스이름:
	def __init__(self, 인수, ...): #생성자
    	def 메서드이름(self, 인수, ...): #메서드
  • __init__ 메서드가 생성자 역할을 수행하여, 인스턴스가 만들어 질 때 한번만 호출됨
  • 클래스 메서드의 첫번째 인수로 '자신의 인스턴스'를 나타내는 self를 반드시 기술해야한다.
class Person:
    def __init__(self, name):
        self.name = name
        print(self.name + "is initialized")
    def work(self, company):
        print(self.name + " is working in "+company)
    def sleep(self):
        print(self.name + "is sleeping")
    
obj = Person("PARK")
obj.work('abc')
obj.sleep()
print("current person object is ", obj.name)
👩‍💻결과
PARKis initialized
PARK is working in abc
PARKis sleeping
current person object is PARK

Private 멤버변수, Private 멤버메서드

  • 파이썬은 기본적으로 모든 멤버가 public이기 때문에, 외부에서 직접 접근 가능하다.
  • 멤버 변수, 멤버 메서드를 멤버변수, 멤버메서드 형태로 선언한다면 private으로 설정 할 수 있다.
class PrivateMemberTest:
    def __init__(self, name1, name2):
        self.name1 = name1
        self.__name2 = name2 #private member variable
        print("1. initialized with "+name1+","+name2)
        
    def getNames(self):
        self.__printNames()
        return str('4'), self.name1, self.__name2

    def __printNames(self): #private member method
        print('3. ',self.name1, self.__name2)

#인스턴스 생성
obj = PrivateMemberTest("Park", 'kim')

print(obj.name1)
print(obj.getNames())

#private 변수는 외부 객체로부터 직접 접근할 수 없다. 
print(obj.__printNames()) #error 발생
print(obj.__name2) #error 발생
👩‍💻결과
1. initialized with Park,kim
Park
3.  Park kim
('4', 'Park', 'kim')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-89-46200654f1ce> in <module>
     17 print(obj.name1)
     18 print(obj.getNames())
---> 19 print(obj.__printNames()) #error 발생
     20 print(obj.__name2)
AttributeError: 'PrivateMemberTest' object has no attribute '__printNames'

외부함수와 클래스 method name이 같은 경우

  • self를 붙이지 않으면 동일한 이름의 외부 함수 호출된다.
def print_name(name):
    print("[def] ",name)

class SameTest:
    def __init__(self):
        pass
    
    #외부함수와 동일한 이름으로 method 정의
    def print_name(self, name):
        print("[SameTest] ", name)
    
    def call_test(self):
        #외부 함수 호출
        print_name("kim")
        
        #클래스 내부 method 호출
        self.print_name("kim")
        
#인스턴스 생성
obj = SameTest()

#print_name 함수 호출
print_name("lee")

#print_name method 호출
obj.print_name('lee')

#call method call_test
obj.call_test()
👩‍💻결과
[def]  lee
[SameTest]  lee
[def]  kim
[SameTest]  kim

2. 예외처리

  • 파이썬 exception은 try...except문을 사용한다.
    • try 블록에서 에러가 발생 시 except 문으로 이동하여 예외 처리 수행
    • try 문은 또한 finally 문을 가질 수 있는데, finally 블럭은 try 블럭이 정상적으로 실행되든, 에러가 발생하여 except가 실행되든 항상 마지막에 실행됨
 <def calc(list_data):
    sum =0
    
    try:
        sum = list_data[0] + list_data[1] + list_data[2]
        
        if sum < 0:
            raise Exception('Sum is minus')
        
    except IndexError as err:
        print(str(err))
    except Exception as err:
        print(str(err))
    finally:
        print(sum)
        
calc([1,2])       #list index out of range
calc([1,2,-100])  #Sum is minus
calc([1,2,3]) 
👩‍💻결과 
list index out of range
0
Sum is minus
-97
6

3. with 구문

  • 일반적으로 파일 또는 세션을 사용하는 순서는 다음과 같다.

    open() => read() 또는 write() => close()

  • 일반적인 방법
f = open('경로', 'w')
f.write("hello, python!")
f.close()
  • 그러나 파이썬에서 with 구문을 사용하면 명시적으로 리소스 close()를 해주지 않아도 자동으로 close()해주는 기능이 있음. with 블록을 벗어나는 순간 파일이나 세션 등의 리소스를 자동으로 close 시킴

  • with 구문을 사용하는 방법

    • with 블록을 벗어나는 순간 파일 객체 f가 자동으로 close 됨
with open("파일경로",'w') as f:
  f.write("Hellow python")
profile
Sin prisa, sin pausa.

0개의 댓글