Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 객체 지향 프로그래밍?

<시간/>

파이썬은 처음부터 객체 지향 프로그래밍 언어였습니다. 클래스와 객체는 객체 지향 프로그래밍의 두 가지 주요 빌딩 블록입니다.

클래스는 객체가 클래스의 인스턴스인 새로운 유형의 객체를 생성합니다.

가장 간단한 클래스 중 하나를 만들어 보겠습니다.

Python에서 클래스 정의

그냥 빈 클래스를 정의하자.

#Define a class
class Vehicle():
   pass # An empty block

# Instantiating objects
v = Vehicle()
print(v)

결과

<__main__.Vehicle object at 0x055DB9F0>

위에서 무엇을 했는가?

따라서 먼저 클래스 문을 사용하여 새 클래스 Vehicle을 만들고 그 뒤에 클래스 본문을 형성하는 들여쓰기된 문 블록이 옵니다. 우리의 경우 pass 문을 사용하여 기소된 빈 블록이 있습니다.

다음으로 Vehicle 클래스를 사용하기 위해 클래스 이름 뒤에 한 쌍의 괄호를 사용하여 이 클래스의 객체/인스턴스를 만들었습니다. 그런 다음 객체가 생성되었는지 확인하기 위해 간단히 인쇄하고 __main__ 모듈에 Vehicle 클래스의 인스턴스가 있다는 정보를 얻습니다.

Object(v)는 클래스의 인스턴스입니다. 각 특정 개체는 특정 클래스의 인스턴스입니다. 클래스의 인스턴스를 최대한 많이 생성하고 클래스 메서드와 속성을 포함할 수 있습니다.

클래스 내부에 정의된 모든 메서드와 변수는 해당 개체에 액세스할 수 있습니다.

클래스 내 메소드 정의

class Vehicle():
   def car(self):
      color = 'Red'
      return color

v = Vehicle()
print(v.car())
print(v)

결과

Red
<__main__.Vehicle object at 0x05A59690>

인스턴스 메소드

파이썬에서 클래스의 메소드를 정의할 때 모든 인스턴스 메소드에 하나의 기본 인수인 self를 제공해야 합니다. 이는 해당 클래스에서 객체를 생성할 때 해당 객체 자체가 해당 메소드를 전달한다는 것을 의미합니다.

일반적으로 함수를 호출하는 동안 인수(self)를 제공하지 않지만 해당 클래스 내에서 해당 함수를 정의할 때마다 인수(self)는 필수입니다.

예제를 통해 위의 개념을 이해합시다.

class myClass():
   def myMethod(self):
      return 'Hello'

myInstance = myClass()
print(myInstance.myMethod())

결과

Hello

따라서 위의 프로그램에서 myClass 클래스를 정의하고 그 안에 myMethod() 메서드를 정의하고 self라는 하나의 인수만 전달합니다.

그러나 클래스의 인스턴스를 통해 메서드를 호출할 때 해당 메서드에 대한 인수를 제공하지 않았습니다. 이는 인스턴스에서 메서드를 호출할 때마다 첫 번째 인수 자체가 클래스의 인스턴스이기 때문입니다.

위의 프로그램에서 한 줄을 수정합시다-

def myMethod():

내 메서드(myMethod())에서 인수(self)를 제거합니다. 이제 프로그램을 다시 실행하고 무슨 일이 일어났는지 봅시다.

================ RESTART: C:\Python\Python361\oops_python.py ================
Traceback (most recent call last):
File "C:\Python\Python361\oops_python.py", line 18, in <module>
print(myInstance.myMethod())
TypeError: myMethod() takes 0 positional arguments but 1 was given

따라서 메서드에 대한 첫 번째 인수는 self여야 합니다.

인스턴스 속성

이들은 __init__ 메서드에 대한 매개변수로 정의된 객체별 속성입니다. 각 개체는 서로 다른 값을 가질 수 있습니다.

아래 예를 고려하십시오.

import random

class myClass():
def myMethod(self):
self.attrib1 = random.randint(1, 11)
self.attrib2 = random.randint(1,21)

myInst = myClass()
myInst.myMethod()

print(myInst.attrib1)
print(myInst.attrib2)

결과

2
18

위 프로그램에서 "attrib1"과 "attrib2"는 인스턴스 속성입니다.

Python의 초기화 생성자

생성자는 클래스의 인스턴스 멤버를 초기화하는 데 사용되는 특정 유형의 메서드입니다.

생성자는 두 가지 유형이 될 수 있습니다.

  • 매개변수화된 생성자
  • 매개변수화되지 않은 생성자

파이썬에서 "__init__"은 모든 파이썬 클래스와 연결된 고유한 메서드입니다.

Python은 클래스에서 생성된 모든 객체에 대해 자동으로 호출합니다. 그 목적은 사용자가 제공한 값으로 클래스 속성을 초기화하는 것입니다.

객체 지향 프로그래밍에서는 생성자라고 합니다.

class Employee:
   def __init__(self, name):
      self.name = name
   
   def display(self):
      print("The name of the employee is: ", self.name)
obj1 = Employee('Zack')
obj2 = Employee('Rajesh')
obj3 = Employee('Tashleem')

obj3.display()
obj1.display()

결과

The name of the employee is: Tashleem
The name of the employee is: Zack

위 프로그램에서 인스턴스(obj1 &obj2)를 생성할 때 name 인수를 전달하면 생성자가 해당 인수를 인스턴스 속성에 할당합니다.

따라서 특정 인스턴스에서 display 메서드를 호출하면 특정 이름을 얻게 됩니다.

Python의 캡슐화

파이썬은 본질적으로 oop이므로 메서드와 변수에 대한 액세스를 제한하는 방법을 제공합니다.

데이터 캡슐화를 사용하면 개체의 속성을 호출하여 인스턴스 속성을 직접 수정할 수 없습니다. 그것은 우리의 애플리케이션을 해커에게 취약하게 만들 것입니다. 그러나 특정 메서드를 호출하여 인스턴스 속성 값만 변경합니다.

class Product:
   def __init__(self):
      self.__maxprice = 1000
      self.__minprice = 1

   def sellingPrice(self):
      print('Our product maximum price is: {}'.format(self.__maxprice))
      print('Our product minimum price is: {}'.format(self.__minprice))

   def productMaxPrice(self, price):
      self.__maxprice = price

def productMinPrice(self, price):
self.__minprice = price

prod1= Product()
prod1.sellingPrice()

prod1.__maxprice = 1500
prod1.sellingPrice()

prod1.__minprice = 10
prod1.sellingPrice()

prod1.productMaxPrice(1500)
prod1.sellingPrice()

prod1.productMinPrice(10)
prod1.sellingPrice()

결과

Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 10

위 프로그램에서 Product 클래스의 인스턴스를 생성하고 인스턴스 변수의 값을 수정하려고 시도했지만 여전히 생성자 내부에 설정된 값을 제공합니다.

인스턴스 속성의 값을 수정하는 유일한 방법은 productMaxPrice() 또는 productMinPrice() 메소드를 호출하는 것입니다.