관리 메뉴

사적공간

클래스/ 메소드의 정의/ self 매개변수 / UML클래스/객체 인스턴스/객체멤버 접근 / str메소드 본문

KNOU_CS/파이썬

클래스/ 메소드의 정의/ self 매개변수 / UML클래스/객체 인스턴스/객체멤버 접근 / str메소드

2sac 2024. 3. 25. 14:49

*객체지향 패러다임의 특징 

추상화: 공통의 속성이나 기능을 도출 

캡슐화: 데이터 구조와 데이터의 연산을 결합

상속: 상속 개념의 특징이 하위 개념에 전달 

다형성: 유사 객체의 사용성을 그대로 유지 

 

 

 

<클래스 정의 구문>

class 클래스 이름: 

    초기자 정의 

    메소드 정의 

 

메소드(method)

객체에 대한 행동(연산)을 정의 

함수의 정의 . 및 사용 방법과 동일 

 

 

<메소드 정의 구문>

class 클래스 이름: 

    def 메소드 이름[self, 매개변수 리스트]: 

        코드 블럭 

 

self 매개변수 

모든 메소드의 첫번째 매개변수 

메소드의 구현에 사용되지만 메소드 호출시 사용되지 않음 

객체 자신을 참조하여 클래스 정의에 포함된 멤버에 접근 시 사용 

 


원뿔의 부피와 겉넓이 구하기 / self 매개변수/ UML 클래스 설계

self 매개변수

-모든 메소드의 첫 번째 매개변수

-메소드의 구현에 사용되지만 메소드 호출 시 사용되지 않음 

-객체 자신을 참조하여 클래스 정의에 포함된 멤버 접근 시 사용 (원래라면 정의된 함수에 한정된 스코프 범위가 클래스 전체로 늘어남)

 

UML 클래스 다이어그램 

데이터 필드, 생성자, 메소드 표현 방법 표준화 

클래스 이름 
데이터 필드 이름: 데이터 필드 타입 
클래스 이름(매개변수 이름: 매개변수 타입)
메소드 이름(매개변수 이름: 매개변수 타입): 반환값 타입 

 

Cone
r: int
h: int
Cone(radius = 20: int, height = 30:int)
get_vol( ):float
get_surf( ): float

 

class Cone: 
    def _init_(self, radius = 20, height = 30):
        self.r = radius
        self.h = height

    def get_vol(self) :
        return 1/3 * 3.14 * self.r ** 2 * self.h
    
    def get_surf(self) : 
        return 3.14 * self.r ** 2 + 3.14 * self.r * self.h
        


# 원뿔 계산 함수 정의
def rtn_cone_vol_surf(r, h) :
    if r > 0 and h > 0 :
        # r, h 모두 양수일 때
        vol = 1/3 * 3.14 * r ** 2 * h
        suf = 3.14 * r ** 2 + 3.14 * r * h
        return vol, surf
    else :
        # r, h가 음수일 때
        print("반지름과 높이 값에 양수를 입력하세요")

 

 

 

 

 

 

 

 

BMI 지수 구하기 / UML 클래스 설계 

클래스 이름 
데이터 필드 이름: 데이터 필드 타입 
클래스 이름(매개변수 이름: 매개변수 타입)
메소드 이름(매개변수 이름: 매개변수 타입): 반환값 타입 

 

BMI
name: str
age: int
weight: float
height: float
BMI(name: str, age: int, weight: float, height: float)
get_BMI( ): float
get_status( ): str

 

 

 

BMI / 객체와 인스턴스 / 초기자 

 

객체(인스턴스) 생성 구문형식

클래스 이름(초기 파라미터)

 

-클래스 생성자(constructor)를 통해 클래스의 인스턴스 생성

-객체와 인스턴스는 같은 개념 

-클래스의 생성자는 클래스의 이름과 동일 

-클래스의 이름과 초기자의 매개변수를 사용하여 생성자를 호출 

 

 

 

초기자(initializer)

객체의 상태를 초기화하는 특수 메소드 

항상 __init__으로 명명 

 

 

person1 = BMI("홍길동", 40, 78, 182)
print(person1.name + "님(" + str(person1.age) + "세)의 BMI 수치는", person1.get_BMI(), "결과는", person1.get_status(), "입니다.")

홍길동님(40세)의 BMI 수치는 23.54788069073783 결과는 과체중 입니다.

 

객체 멤버 접근 연산자( . )

 

구문 형식 

 

<객체 생성>

객체 참조변수 = 클래스 이름(초기자 파라미터) 

 

<객체 접근> 

객체 참조변수.데이터 필드

객체 참조변수.메소드(파라미터)

 

초기자(initializer)

-(1). 클래스에 해당하는 객체를 생성하고, (2). __init__( ) 로 객체를 호출 

class BMI :
    def __init__(self, name, age, weight, height) :
        self.name = name;
        self.age = age 
        self.weight = weight
        self.height = height

    def get_BMI(self) :
        return self.weight / (self.height / 100) ** 2

    def get_status(self) :
        BMI = self.get_BMI()

        if BMI >= 25 : 
            return "비만"
        elif BMI >= 23 and BMI < 25 :
            return "과체중"
        elif BMI >= 18.5 and BMI < 23 :
            return "정상"
        else : 
            return "저체중"

 

 

메소드 

 

print("I love python".upper()) ## 대문자로 변경 
isymbol = "I love python".replace("o", "i") 있는 ## o를 i로 대체후 저장 
print(isymbol) 
dir(str) ## 사용 가능한 메소드 나열

 

결과

I LOVE PYTHON
I live pythin
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmod__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',
 'format',
 'format_map',
 'index',
 'isalnum',
 'isalpha',
 'isascii',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',
 'removeprefix',
 'removesuffix',
 'replace',
 'rfind',
 'rindex',
 'rjust',
 'rpartition',
 'rsplit',
 'rstrip',
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']