파이썬 클래스와 객체 – 객체 지향 프로그래밍



'Python Class'에 대한이 블로그는 클래스, 속성 및 상속, 다형성 및 캡슐화와 같은 다양한 OOPS 개념의 기본 사항을 다룹니다.

Stack Overflow가 2019 년까지 Python은 적극적인 개발자 측면에서 다른 언어를 능가 할 것이라고 예측 한 후 성장하고 있습니다.Python은 객체 지향 프로그래밍 패러다임을 따릅니다. 파이썬 클래스 선언, 객체 생성 및 사용자와의 상호 작용을 다룹니다. 객체 지향 언어에서 프로그램은 자체 포함 된 객체로 분할되거나 여러 미니 프로그램으로 말할 수 있습니다. 각 개체는 서로 통신 할 수있는 응용 프로그램의 다른 부분을 나타냅니다.
이 파이썬 클래스 블로그에서는 다음 순서로 클래스와 객체의 각 측면을 이해할 수 있습니다.

시작하자.:-)





Python 클래스 란 무엇입니까?

파이썬의 클래스는 특정 객체가 생성되는 청사진입니다. 특정 방식으로 소프트웨어를 구성 할 수 있습니다. 방법에 대한 질문이 있습니다. 클래스를 사용하면 재사용하기 쉬운 방식으로 데이터와 기능을 논리적으로 그룹화하고 필요에 따라 빌드 할 수 있습니다. 아래 이미지를 고려하십시오.

ClassesAndObjects-Python 클래스-Edureka첫 번째 이미지 (A)에서는 다음과 같이 간주 될 수있는 집의 청사진을 나타냅니다. 수업 . 동일한 청사진으로 여러 집을 만들 수 있으며 다음과 같이 간주 할 수 있습니다. 사물 . 클래스를 사용하면 프로그램에 일관성을 추가하여 더 깨끗하고 효율적인 방법으로 사용할 수 있습니다. 속성은 데이터 멤버 (클래스 변수 및 인스턴스 변수)와 점 표기법을 통해 액세스되는 메서드입니다.



  • 클래스 변수 클래스의 모든 다른 객체 / 인스턴스가 공유하는 변수입니다.
  • 인스턴스 변수 각 인스턴스에 고유 한 변수입니다. 메서드 내에서 정의되며 클래스의 현재 인스턴스에만 속합니다.
  • 행동 양식 클래스에 정의되고 객체의 동작을 설명하는 함수로도 호출됩니다.

이제 PyCharm에서 어떻게 작동하는지 살펴 보겠습니다. 시작하려면 먼저 파이썬 클래스의 구문을 살펴보십시오.

통사론 :

class Class_name : statement-1. . 문 -N

여기에서 ' 수업' 문은 새 클래스 정의를 만듭니다. 클래스 이름은 키워드 ' 수업' 콜론이 뒤에 오는 파이썬에서. 파이썬으로 클래스를 생성하려면 아래 예제를 고려하십시오.



직원 클래스 : 통과 # 속성 및 메서드 없음 emp_1 = employee () emp_2 = employee () # 인스턴스 변수는 수동으로 생성 가능 emp_1.first = 'aayushi'emp_1.last = 'Johari'emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first ='test 'emp_2.last ='abc 'emp_2.email='test@company.com'emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

산출 -

aayushi@edureka.co test@company.com

정수에 대한 Java의 전원 함수

이제 이러한 변수를 수동으로 설정하지 않으려면 어떻게해야합니까? 많은 코드가 표시되고 오류가 발생하기 쉽습니다. 따라서 자동으로 만들기 위해 'init'메서드를 사용할 수 있습니다. 이를 위해 파이썬 클래스의 메서드와 속성이 정확히 무엇인지 이해해 봅시다.

Python 클래스의 메서드 및 속성

이제 클래스 생성은 일부 기능 없이는 불완전합니다. 따라서 해당 속성과 관련된 데이터 및 기능의 컨테이너 역할을하는 다양한 속성을 설정하여 기능을 정의 할 수 있습니다. 파이썬의 함수는 다음과 같이 호출됩니다. 행동 양식 . 에 대해 이야기 초기화 방법 , 해당 클래스의 새 객체가 인스턴스화 될 때마다 호출되는 특수 함수입니다. 초기화 메소드로 생각하거나 C ++, Java 등과 같은 다른 객체 지향 프로그래밍 배경에서 오는 경우 생성자로 간주 할 수 있습니다. 이제 클래스 내부에 메소드를 설정하면 인스턴스가 자동으로 수신됩니다. python 클래스를 진행하고이 방법을 사용하여 이름, 성 및 급여를 수락합니다.

직원 클래스 : def __init __ (self, first, last, sal) : self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com'emp_1 = employee ( 'aayushi', 'johari', 350000) emp_2 = employee ( 'test', 'test', 100000) print (emp_1.email) print (emp_2.email)

이제 'init'메소드 내에서 이러한 인스턴스 변수 (self, first, last, sal)를 설정했습니다. Self는 self.fname = first를 쓸 때마다 emp_1.first =’aayushi’와 동일 함을 의미하는 인스턴스입니다. 그런 다음 init 메서드에 지정된 값을 전달할 수있는 employee 클래스의 인스턴스를 만들었습니다. 이 메서드는 인스턴스를 인수로 사용합니다. 수동으로 수행하는 대신 수행됩니다. 자동으로 지금.

다음으로 우리는 어떤 종류의 행동을 수행 할 수있는 능력을 원합니다. 이를 위해 우리는 방법 이 수업에. 직원의 전체 이름을 표시하는 기능을 원한다고 가정합니다. 그래서 이것을 실제로 구현해 봅시다.

직원 클래스 : def __init __ (self, first, last, sal) : self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com'def fullname (self) : return '{} {}'. format (self.fname, self.lname) emp_1 = employee ( 'aayushi', 'johari', 350000) emp_2 = employee ( 'test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

산출-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

위에서 볼 수 있듯이 클래스 내에“full name”이라는 메서드를 만들었습니다. 따라서 파이썬 클래스 내의 각 메서드는 자동으로 인스턴스를 첫 번째 인수로 사용합니다. 이제이 메서드 내에서 전체 이름을 인쇄하고 emp_1 이름과 성 대신 이것을 반환하는 논리를 작성했습니다. 다음으로 모든 인스턴스에서 작동하도록 'self'를 사용했습니다. 따라서 매번 인쇄하려면 방법 .

Python 클래스로 이동하면 클래스의 모든 인스턴스간에 공유되는 변수가 있습니다. 이것들은 클래스 변수 . 인스턴스 변수는 이름, 이메일, sal 등과 같은 각 인스턴스에 대해 고유 할 수 있습니다. 복잡합니까? 예를 들어 이해합시다. 연봉 인상을 확인하려면 아래 코드를 참조하십시오.

직원 클래스 : perc_raise = 1.05 def __init __ (self, first, last, sal) : self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com'def fullname (self) : return '{} {}'. format (self.fname, self.lname) def apply_raise (self) : self.sal = int (self.sal * 1.05 ) emp_1 = employee ( 'aayushi', 'johari', 350000) emp_2 = employee ( 'test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

산출-

350000 367500

위에서 볼 수 있듯이 급여를 먼저 인쇄 한 다음 1.5 % 인상을 적용했습니다. 이러한 클래스 변수에 액세스하려면 클래스 또는 클래스의 인스턴스를 통해 액세스해야합니다. 이제 파이썬 클래스의 다양한 속성을 이해해 보겠습니다.

Python 클래스의 속성

Python의 속성은 객체, 요소 또는 파일의 속성을 정의합니다. 두 가지 유형의 속성이 있습니다.

  • 내장 클래스 속성 : Python 클래스에는 다양한 내장 속성이 있습니다. 예를 들면 _dict_, _doc_, _name _ 등입니다. employee1의 모든 키-값 쌍을 보려는 동일한 예를 살펴 보겠습니다. 이를 위해 클래스 네임 스페이스를 포함하는 아래 문을 간단히 작성할 수 있습니다.

    print (emp_1 .__ dict__)

    실행 후 {‘fname’:‘aayushi’,‘lname’:‘johari’,‘sal’: 350000,’email’:‘aayushi.johari@company.com’}과 같은 출력이 표시됩니다.

  • 사용자가 정의한 속성 : 속성은 클래스 정의 내에 생성됩니다. 클래스의 기존 인스턴스에 대한 새 속성을 동적으로 만들 수 있습니다. 속성은 클래스 이름에도 바인딩 될 수 있습니다.

다음으로 공개, 보호은밀한 속성. 자세히 이해하겠습니다.

명명 유형 의미
이름공공의이러한 속성은 클래스 정의 내부 또는 외부에서 자유롭게 사용할 수 있습니다.
_이름보호보호 된 속성은 하위 클래스 정의 내부가 아니면 클래스 정의 외부에서 사용해서는 안됩니다.
__이름은밀한이러한 종류의 속성은 액세스 할 수없고 보이지 않습니다. 클래스 정의 내부를 제외하고는 이러한 속성을 읽거나 쓸 수 없습니다.


다음으로 파이썬 클래스에서 가장 중요한 구성 요소 즉, 객체를 이해하겠습니다.

Python 클래스의 객체는 무엇입니까?

위에서 논의했듯이 객체를 사용하여 다른 속성에 액세스 할 수 있습니다. 클래스의 인스턴스를 만드는 데 사용됩니다. 인스턴스는 런타임에 생성되는 클래스의 객체입니다.

o 빠른 개요를 제공합니다. 개체는 기본적으로 주변에서 보는 모든 것입니다. 예 : 개는 동물 등급의 대상이고, 나는 인간 등급의 대상입니다. 마찬가지로 동일한 전화 클래스에 다른 개체가있을 수 있습니다.이것은 이미 논의한 함수 호출과 매우 유사합니다. 예를 들어 이해해 보겠습니다.

class MyClass : def func (self) : print ( 'Hello') # 새 MyClass 생성 ob = MyClass () ob.func ()

파이썬 클래스로 넘어 가서 다양한 OOP 개념을 이해합시다.

OOP 개념

OOP는 Python의 객체 지향 프로그래밍을 나타냅니다. 글쎄요, 파이썬은 일부 절차 적 함수를 포함하고 있기 때문에 완전히 객체 지향적이지 않습니다. 이제 절차 적 프로그래밍과 객체 지향 프로그래밍의 차이점이 무엇인지 궁금 할 것입니다. 의심을 없애기 위해 절차 적 프로그래밍에서 전체 코드는 함수와 서브 루틴이 포함되어 있어도 하나의 긴 절차로 작성됩니다. 데이터와 로직이 혼합되어 관리가 불가능합니다. 그러나 객체 지향 프로그래밍에 대해 이야기 할 때 프로그램은 자체 포함 된 객체 또는 여러 미니 프로그램으로 분할됩니다. 각 개체는 서로 통신 할 자체 데이터와 논리를 가진 응용 프로그램의 다른 부분을 나타냅니다. 예를 들어 웹 사이트에는 이미지, 비디오 등과 같은 다른 개체가 있습니다.
객체 지향 프로그래밍에는 Python 클래스, 객체, 상속, 다형성, 추상화 등의 개념이 포함됩니다. 이러한 주제를 자세히 이해합시다.

Python 클래스 : 상속

상속을 통해 기본 / 부모 클래스에서 속성과 메서드를 상속 할 수 있습니다. 이는 하위 클래스를 만들고 부모 클래스에서 모든 기능을 얻을 수 있기 때문에 유용합니다. 그런 다음 부모 클래스에 영향을주지 않고 새 기능을 덮어 쓰고 추가 할 수 있습니다. 예를 들어 부모 클래스와 자식 클래스의 개념을 이해합시다.

이미지에서 볼 수 있듯이 자식은 아버지로부터 속성을 상속받습니다. 마찬가지로 파이썬에는 두 가지 클래스가 있습니다.

자바 스캐너 란?

1. 상위 클래스 (Super 또는 Base 클래스)

2. 하위 클래스 (하위 클래스 또는 파생 클래스)

속성을 상속하는 클래스는 아이 클래스 반면 속성이 상속되는 클래스는 부모의 수업.

상속이란 하위 클래스 부모의 전문성을 포함합니다. 단일, 다중 레벨, 계층 적 및 다중 상속의 네 가지 유형으로 더 나뉩니다. 더 나은 이해를 위해 아래 이미지를 참조하십시오.

파이썬 클래스를 계속해서 상속이 어떻게 유용한 지 이해해 봅시다.

직원 유형에 대한 수업을 만들고 싶습니다. 개발자와 관리자 모두 이름, 이메일 및 급여가 있고 이러한 모든 기능이 직원 클래스에 있으므로 하위 클래스로‘개발자’와‘관리자’를 만들겠습니다. 따라서 하위 클래스에 대한 코드를 복사하는 대신 직원으로부터 상속하여 코드를 재사용 할 수 있습니다.

직원 클래스 : num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal) : self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com'employee.num_employee + = 1 def fullname (self) : return '{} {}'. format (self.first, self.last) def apply_raise (self) : self.sal = int ( self.sal * raise_amount) class developer (employee) : pass emp_1 = developer ( 'aayushi', 'johari', 1000000) print (emp_1.email)
 산출 -aayushi.johari@company.com

위의 출력에서 ​​볼 수 있듯이 직원 클래스의 모든 세부 정보는 개발자 클래스에서 사용할 수 있습니다.이제 개발자의 raise_amount를 10 %로 변경하려면 어떻게해야합니까? 실제로 어떻게 할 수 있는지 봅시다.

직원 클래스 : num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal) : self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com'employee.num_employee + = 1 def fullname (self) : return '{} {}'. format (self.first, self.last) def apply_raise (self) : self.sal = int ( self.sal * raise_amount) class developer (employee) : raise_amount = 1.10 emp_1 = developer ( 'aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 산출 -1.1

보시다시피 급여 상승률이 4 %에서 10 %로 업데이트되었습니다.이제 속성을 하나 더 추가하려면 init 메서드에서 프로그래밍 언어를 말하지만 부모 클래스에는 존재하지 않습니다. 그것에 대한 해결책이 있습니까? 예! 전체 직원 로직을 복사 할 수 있지만 그렇게하면 코드 크기가 다시 증가합니다. 이를 방지하기 위해 아래 코드를 살펴 보겠습니다.

직원 클래스 : num_employee = 0 raise_amount = 1.04 def __init __ (self, first, last, sal) : self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com'employee.num_employee + = 1 def fullname (self) : return '{} {}'. format (self.first, self.last) def apply_raise (self) : self.sal = int ( self.sal * raise_amount) class developer (employee) : raise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang) : super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') print (emp_1.prog_lang)

따라서 약간의 코드로 변경했습니다. 기본 클래스에서 속성을 상속하는 super .__ init __ (first, last, pay)를 사용했습니다.결론적으로 상속은 코드를 재사용하고 프로그램의 복잡성을 줄이는 데 사용됩니다.

Python 클래스 : 다형성

컴퓨터 과학의 다형성은 서로 다른 기본 형태에 대해 동일한 인터페이스를 제공하는 능력입니다. 실제로 다형성이란 클래스 B가 클래스 A에서 상속하는 경우 클래스 A에 대한 모든 것을 상속 할 필요가없고 클래스 A가 수행하는 일부 작업을 다르게 수행 할 수 있음을 의미합니다. 상속을 처리하는 동안 가장 일반적으로 사용됩니다. Python은 암시 적으로 다형성이며 표준 연산자를 오버로드하여 컨텍스트에 따라 적절한 동작을 할 수 있습니다.

예를 들어 이해합시다.

class Animal : def __init __ (self, name) : self.name = name def talk (self) : pass class Dog (Animal) : def talk (self) : print ( 'Woof') class Cat (Animal) : def talk ( self) : print ( 'MEOW!') c = Cat ( 'kitty') c.talk () d = Dog (Animal) d.talk ()

출력 –

야옹! 씨

다음으로 다른 객체 지향 프로그래밍 개념, 즉 추상화로 이동하겠습니다.

double을 정수 Java로 변환

Python 클래스 : 추상화

추상화는 문제에 적합한 클래스를 모델링하여 복잡한 현실을 단순화하는 데 사용됩니다. 여기에는 인스턴스화 할 수없는 추상 클래스가 있습니다. 즉, 이러한 클래스에 대한 개체 또는 인스턴스를 만들 수 없습니다. 기본 클래스로 호출하는 특정 기능을 상속하는 데만 사용할 수 있습니다. 따라서 기능을 상속 할 수 있지만 동시에이 특정 클래스의 인스턴스를 만들 수 없습니다. 아래 예제를 통해 추상 클래스의 개념을 이해해 보겠습니다.

from abc import ABC, abstractmethod class Employee (ABC) : @abstractmethod def calculate_salary (self, sal) : pass class Developer (Employee) : def calculate_salary (self, sal) : finalsalary = sal * 1.10 return finalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

산출-

11000.0

위의 출력에서 ​​볼 수 있듯이 기본 급여를 10 %로 늘 렸습니다. 즉 급여는 이제 11000입니다. 이제 실제로 계속해서 'Employee'클래스의 객체를 만들면 파이썬이 수행하지 않는 것처럼 오류가 발생합니다. 추상 클래스의 객체를 만들 수 없습니다. 그러나 상속을 사용하면 실제로 속성을 상속하고 각 작업을 수행 할 수 있습니다.

그래서 여러분, 이것은 간단히 말해서 파이썬 클래스와 객체에 관한 것입니다. 파이썬 클래스, 객체 및 다양한 객체 지향 개념의 모든 기본 사항을 파이썬으로 다루었으므로 지금 연습을 시작할 수 있습니다. 여러분이 'Python Class'에 대한이 블로그를 즐겁게 읽고 위에서 논의한 모든 측면을 명확하게 이해하시기 바랍니다. 파이썬 수업 후, scikit 학습 라이브러리와 배열을위한 파이썬에 대한 더 많은 블로그를 만들 것입니다. 계속 지켜봐주세요!

질문이 있으십니까? 이 'Python Class'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.

다양한 응용 프로그램과 함께 Python에 대한 심층적 인 지식을 얻으려면 다음을 수행 할 수 있습니다. 연중 무휴 지원 및 평생 액세스를 제공하는 라이브 온라인 교육을 통해.