Python 기본 객체 지향 프로그래밍

10023 단어 ooppython
경고: 이것은 긴 튜토리얼입니다(또한 이것은 저의 첫 번째 튜토리얼이므로 아마 좋지 않을 것입니다 :)

객체 지향 프로그래밍(Object Oriented Programming, OOP)은 객체를 모델링하는 방법으로 시뮬레이션에 유용합니다. 객체 지향 프로그래밍 이전에는 긴 코드 조각이 함수로 작성되었습니다. 함수에는 장점이 있지만 코드를 멋진 스파게티 그릇처럼 보이게 만드는 경향이 있습니다.



맛있지 만 아무도 읽을 수 없습니다. 아무도 스파게티를 읽을 수 없기 때문입니다.

그러나 다른 코딩 방법이 나타났습니다. 이 방법은 스파게티가 아니라 깔끔하고 잘 정돈된 막대기에 가깝습니다.



이제 우리가 부엌을 만드는 회사라고 상상해 봅시다. 우리는 또한 훌륭한 프로그래머이기 때문에 주방 제작 과정을 돕기 위해 몇 가지 코드를 작성하고 있습니다. 우리는 부엌을 위한 일반적인 템플릿을 생각해 내야 합니다. 이 코드를 입력해야 합니다(입력이 중요합니다. 복사 및 붙여넣기 금지).

class GenericKitchen:

    def __init__(self, numOfApplicances, kitchenSize):
        self.numberOfApplicances = numOfApplicances
        self.kitchenSize = kitchenSize # kitchenSize is a tuple (width, height)
        print("I have been inited")

    def getInventory(self):
        kitchenWidth = self.kitchenSize[0]
        kitchenHeight = self.kitchenSize[1]
        print(f"Number of appliances: {self.numberOfApplicances}")
        print(f"Size of kitchen: {kitchenWidth} by {kitchenHeight}")


고장:




class GenericKitchen:


이것은 파이썬에게 GenericKitchen가 클래스임을 알려주는 데 사용됩니다.

def __init__(self, numOfAppliances, kitchenSize):
        self.numberOfAppliances = numOfAppliances
        self.kitchenSize = kitchenSize 
        print("I have been inited") 

__init__ 메서드(일명 함수)는 던더 메서드(이중 밑줄)입니다. dunder 메서드는 내장 클래스가 내장 함수와 상호 작용할 수 있도록 하는 함수 유형이지만 이__init__ 메서드는 . self는 파이썬에게 이 변수가 GenericKitchen 클래스의 일부임을 알려줍니다(자세한 내용은 나중에 설명).

def getInventory(self):
        kitchenWidth = self.kitchenSize[0]
        kitchenHeight = self.kitchenSize[1]
        print(f"Number of appliances: {self.numberOfApplicances}")
        print(f"Size of kitchen: {kitchenWidth} by {kitchenHeight}")


Get Inventory는 self에서 상속받은 함수이므로 self에서 모든 변수를 상속받습니다. kitchenWidthkitchenHeight는 지역 변수이므로 함수 외부에서 사용할 수 없습니다.

클래스를 호출하려면 다음을 입력하십시오.

kitchenDimensions = (100, 100)
# ^^^^^^^^^^^^^^^ 
# Don't use such long names, they are a pain to type
normalKitchen = GenericKitchen(5, kitchenDimensions)

>>>  I have been inited


함수를 호출하지 않은 경우 화면에 파이썬이 인쇄I have been inited하는 이유가 궁금할 수 있습니다. 글쎄, 그 이유는 __init__ 메서드가 dunder 메서드이기 때문에 클래스가 호출될 때 무언가를 수행하는 기능입니다. 비슷해보이고,

number = list("hello")
print(number)

>>>  ["h", "e", "l", "l", "o"]


이유는 list가 클래스이기 때문입니다. 목록의 __init__ 메서드는 목록을 생성하고 이를 변수 번호로 반환합니다.

본인



자아는 이해해야 할 매우 중요한 개념입니다(자신도 이해하세요 :)
self는 클래스가 공유하는 모든 변수의 컨테이너입니다. 예를 들어:

class RandomClass():
    def __init__(self):
        self.name = "Jim"
        self.printName()
        self.name = "Tomi"

    def printName(self):
        print(self.name)

    def setAge(self):
        self.age = 14

rand = RandomClass()
rand.printName()

>>> Jim
    Tomi


일어나는 일은 각 클래스 정의와 함께 self가 정의된다는 것입니다. self는 클래스 간에 공유되는 클래스에서 선언된 모든 항목의 컨테이너가 됩니다. printName가 인수 self를 취하는 경우 selfself.age와 같이 self.setAge와 관련된 모든 변수 및 함수를 취합니다. 클래스를 변수에 전달할 때 발생하는 일은 self가 함께 전달되고 self가 변수 이름과 같아지는 것입니다.

결론



클래스는 사물을 모델링하고 더 깨끗한 코드를 위해 아는 것이 중요합니다. Breadstick Code는 Spaghetti Code보다 낫습니다(Breadstick Code Up을 방금 만들었습니다). 클래스는 class ClassName 를 사용하여 정의됩니다. self는 클래스의 모든 인스턴스가 포함된 위치입니다.

좋은 웹페이지 즐겨찾기