-class 객체 생성
'''
문법:
class 클래스명:
#변수
#매서드
특징:
-반드시 작성된 클래스를 메모리에 올려야한다.
메모리에 클래스를 올려주는 작업을 '객체 생성'이라고 부른다.
변수명=클래스명() (자바는 변수명 = new 클래스명())
'''
# xxx 함수, self 가 없다.
def xxx():
pass
class Cat:#eat 메서드, self필수
def eat(self):
self.name="야옹이"
print("{}가 먹는다".format(self.name))
c1=Cat()
'''
파이썬 클래스
문법:
class 클래스명: ==> 분석단계의 객체로부터
# 인스턴스변수 ==> 분석단계의 객체의 속성로부터
인스턴스변수에 저장되는 값은 객체의 속성값 (예> 고양이의 이름,나이,성별 등)
==> self.변수 = 값 형식으로 작성
self가 필요한데, self를 가지고 있는 요소는 메서드이기 때문에
메서드안에서 인스턴스 변수를 선언할 수 있다.
==> self는 객체생성후 B메모리에 만들어진 인스턴스의 주소값을 참조하는 키워드이다.
==> B 메모리에 객체생성할 때마다 매번 생성된다.
# 인스턴스메서드 ==> 분석단계의 객체의 기능(동작)로부터
인스턴스 메서드에서 구현되는 기능은 객체의 동작처리 (예> 고양이 eat, sleep, run 등)
==> 반드시 메서드의 파라미터로 self 를 갖는다.
==> self는 객체생성후 B메모리에 만들어진 인스턴스의 주소값을 참조하는 키워드이다.
특징:
- 반드시 작성된 클래스를 메모리에 올려야 된다.
메모리에 클래스를 올려주는 작업을 '객체생성' 이라고 부른다.
객체생성후에 B 메모리에 생성된 실체를 '인스턴스(instance)'라고 부른다.
변수명 = 클래스명() ( 자바는 변수명 = new 클래스명() )
객체 --> 클래스 ---> 인스턴스
'''
class Cat:
def eat(self):
print("Cat 클래스내에서 ", id(self)) # 2512964908224
c1 = Cat()
c1.eat()
print("Cat 클래스외부에서", id(c1)) # 2512964908224
- 생성자
'''
생성자(constructor)
'''
class Cat:
#클래스 변수
def __init__(self,username,age):#로컬변수
self.username=username#인스턴스 변수
self.age=age #인스턴스 변수
print("__init__생성자")
#생성자
c1=Cat("야옹이",2)
#인스턴스 변수를 직접 접근해서 조회
print(c1.username)
print(c1.age)
c2=Cat("나비",3)
print(c2.username)
print(c2.age)
#나비 age 수정
#인스턴스 변수를 직접 접근해서 수정
c2.age=4
print(c2.age)
'''
인스턴스 변수를 직접 접근하는 방식은 권장하지 않는다.
이유는 올바른 데이터 저장이 안될 수도 있다.
검증할 수 있는 방법이 없기 때문이다.
해결은 매서드를 활용해서 검증 처리후 저장하도록 한다.
'''
-매서드
'''
1.생성자
2. 매서드
'''
class Cat:
#생성자
def __init__(self,username,age):#로컬변수
self.username=username#인스턴스 변수
self.age=age #인스턴스 변수
print("__init__생성자")
#age 변경하는 매서드
def set_age(self,age):
if age<=20:
self.age=age
else:
print("고양이 나이를 잘못입력했습니다. 확인 후 다시 입력해주세요")
# age 값을 반환하는 메서드
def get_age(self):
return self.age
c1=Cat("야옹이",2)
#인스턴스 변수를 직접 접근해서 조회
print(c1.username)
print(c1.age)
c2=Cat("나비",3)
print(c2.username)
print(c2.age)
#나비 age 수정
#인스턴스 변수를 직접 접근해서 수정
#c2.age=4
c2.set_age(400)
print(c2.age,c2.get_age())
'python' 카테고리의 다른 글
| [python] 클래스 변수 | 클래스 매서드 (0) | 2022.09.26 |
|---|---|
| [python] class 중간 정리 (0) | 2022.09.26 |
| [python] filter vs map (0) | 2022.09.26 |
| [python] 변수의 scope | random 함수 (1) | 2022.09.26 |
| [python] generator 함수 (1) | 2022.09.26 |