- 클래스 : 객체의 틀
- 객체 : 객체의 틀로 만든 결과물(속성, 행동)
- 클래스로 객체(인스턴스)를 만든다
- 클래스 이름의 첫글자는 무조건 대문자
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 |