클래스

jinkyung·2021년 3월 9일
0

Python

목록 보기
6/19
post-custom-banner

python 특징

  • 객체지향을 강요하는 언어가 아니다.
  • 함수단위로도 많이 코딩한다.
  • 기본적으로 접근제한자가 public이다.
  • self는 자바의 this와 같다.

사실 자바에서는 아래처럼 모든 메서드의 인자에 this가 들어있다.
파이썬은 그것을 self라는 키워드를 통해 명시적으로 표현하는 것이다.


또한 객체 필드를 만들시 바깥에 만들지 않고 생성자 안쪽에 만든다.

class Calculator:
    def __init__(self):         # 생성자, 정해진 이름!
        self.result = 0         # 필드(멤버 변수)

    def add(self, num):         # 메서드(멤버 함수)
        self.result += num
        return self

    def getresult(self):
        return self.result

cal0 = Calculator()
cal1 = Calculator()
print(cal0.add(100).add(200).add(300).getresult())	# 600출력
print(cal1.add(1).add(2).add(3).getresult())	# 6


class Human:
    # 메서드
    def __init__(self):
        # 필드(멤버 변수)
        self.name = ""
        self.age = 0

    def setHuman(self, name, age):
        self.name = name;
        self.age = age;

    def getHuman(self):
        return self.name, self.age

human0 = Human()
human1 = Human()
human0.setHuman("홍길동", 24)
human1.setHuman("임꺽정", 33)
print(human0.getHuman())
print(human1.getHuman())

# ('홍길동', 24) 출력 
# ('임꺽정', 33)


  • 클래스 설계 후 동적으로 변환 가능.
    객체별로 다른 필드를 줄 수 있다. (서로다른 객체를 분기,확장시켜 나갈 수 있다)
human0.address = "지리산"
human1.score = 99
print(human0.name, human0.age, human0.address)
print(human1.name, human1.age, human1.score)

위처럼 추가시 아래 출력


생성자를 이용하여 다른방식으로 초기화 가능


class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def getHuman(self):
        return self.name, self.age

human0 = Human("홍길동", 24)
human1 = Human("임꺽정", 33)
print(human0.getHuman())
print(human1.getHuman())

# ('홍길동', 24) 출력 
# ('임꺽정', 33)


클래스 변수를 만들면 객체들이 공유하게 된다.


class Academy:
    name = "비트캠프-"	# 모든 객체가 공유할 수 있는 변수 
    stnum = 0

    def __init__(self, name, num):
        self.name = name
        self.stnum = num
        Academy.stnum += num

aca0 = Academy("신촌", 300)
aca1 = Academy("종로", 250)
print("*" * 20)
print(Academy.name + ":" + str(Academy.stnum))
print(Academy.name + aca0.name + ":" + str(aca0.stnum))
print(Academy.name + aca1.name + ":" + str(aca1.stnum))
print("*" * 20)

# 출력결과
********************
비트캠프-:550
비트캠프-신촌:300
비트캠프-종로:250
********************
post-custom-banner

0개의 댓글