python

[python] class 객체생성 | 생성자

전감자(◔◡◔) 2022. 9. 26. 21:08

-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