본문 바로가기

프로그래밍

python class 정리

  • 클래스 : 객체의 틀
  • 객체 : 객체의 틀로 만든 결과물(속성, 행동)
  • 클래스로 객체(인스턴스)를 만든다
  • 클래스 이름의 첫글자는 무조건 대문자
class User:
    pass

user1 = User()
user2 = User()
user3 = User()
user4 = User()
  • 같은 클래스로 만들었어도 서로 다른 객체(인스턴스)임
user1.name = "김대위"
user1.email = "test@test.com"
user1.password = "12321321"

user2.name = "장대위"
user2.email = "test2@test.com"
user2.password = "12321321"

user3.name = "킴대위"
user3.email = "test3@test.com"
user3.password = "12321321"


## .name
## .email
## .password

## 들을 인스턴스 변수라고함
  • 객체 속성-> 변수, 객체 행동->함수(메소드)
  • 메소드(인스턴스 메소드, 클래스메소드, 정적메소드)
  • 인스턴스 메소드 : 인스턴스 변수를 사용하거나 인스턴스 변수에 값을 설정하는 메소드
class User:
    def say_hello(some_user):
        print("안녕{} 야!".format(some_user.name))

user1.name = "김대위"
user1.email = "test@test.com"
user1.passward = "12321321"

User.say_hello(user1)  ##클래스에서 메소드호출
user1.say_hello() ### 인스턴스에 메소드 호출     say_hello()에 첫번째 파라미터로 user1이 들어감

 

  • 첫번째 인스턴스 메소드의 첫번째 파라미터를 self 로 할것을 권장
class User:
    def say_hello(self):
        print("안녕{} 야!".format(self.name))

user1.name = "김대위"
user1.email = "test@test.com"
user1.passward = "12321321"

User.say_hello(user1)  ##클래스에서 메소드호출
user1.say_hello() ### 인스턴스에 메소드 호출     say_hello()에 첫번째 파라미터로 user1이 들어감

  • magic method(특수 메소드): 특정 상황에서 자동으로 호출되는 메소드 __init__  ,  인스턴스가 생성될때 자동으로 생성
class User:
    def initialize(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password
        
user1 = User()
user1.initialize("Young", "young@codeit.kr", "123456")

user2 = User()
user2.initialize("Yoonsoo", "yoonsoo@codeit.kr", "abcdef")



### init method 사용


class User:
    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password


user1 = User("Young", "young@codeit.kr", "123456")
user2 = User("Yoonsoo", "yoonsoo@codeit.kr", "abcdef")
  • 클래스 변수
class User:
	count = 0
    def __init__(self, name, email, password):
    self.name = name
    self.email = email
    self.password = password

	User.count += 1   ### user 늘어날때 클래스변수 count가 1씩 증가

  • 데코레이터함수
def print_hello():
    print("안녕하세요!")

def add_print_to(original):
    def wrapper():
        print('함수시작')
        original()
        print('함수끝')
    return wrapper


add_print_to(print_hello)()





### 다른방식

def add_print_to(original):
    def wrapper():
        print('함수시작')
        original()
        print('함수끝')
    return wrapper

@add_print_to
def print_hello():
    print("안녕하세요!")

print_hello()
  • 인스턴스 변수(인스턴스 메소드), 클래스 변수(클래스 메소드)
  • 인스턴스 메소드는 인스턴스 변수(self.~), 클래스 변수(cls.~) 모두 사용가능하지만 클래스메소드는 인스턴스 변수 사용못함
  • 인스턴스가 하나도 없을경우에(ex 위의 예시에서 user가 0명일때도 user 수를 카운트하고 싶을때)도 변수를 활용하려면 클래스변수로 사용
  • 어떠한 속성을 다루지않고 기능만 있을 경우, 정적 메소드(staticmethod) 사용
class User:
    count = 0
    
    def __init__(self, name, email, pw):
        self.name = name
        self.email = email
        self.pw = pw
    
        User.count += 1
    
    def say_hello(self):
        print("안녕하세요! 저는 {}입니다!".format(self.name))
    
    def __str__(self):
        return "사용자: {}, 이메일: {}, 비밀번호: ******".format(self.name, self.email)
    
    @classmethod
    def number_of_users(cls):
        print("총 유저 수는: {}입니다".format(cls.count))
    
    @staticmethod
    def is_valid_email(email_address):
        return "@" in email_address

 

'프로그래밍' 카테고리의 다른 글

python 이미지 크롭  (0) 2020.05.19
pandas 까먹는것들  (0) 2020.05.15
numpy array와 python list 차이  (0) 2020.05.13
python array  (0) 2020.05.13
자주쓰는 python  (0) 2020.05.13