English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 예시를 통해 파이썬의面向对象编程(OOP) 및 기본 개념을 이해할 수 있습니다.
파이썬은 다양한 프로그래밍 방법을 지원하는 다중 패러다임 프로그래밍 언어입니다.
프로그래밍 문제를 해결하는 일반적인 방법은 객체를 생성하는 것입니다. 이것은 주로面向对象编程(OOP)이라고 불립니다.
객체는 두 가지 특징을 가집니다:
속성
행동
예시를 들어보겠습니다:
파랑새는 물체입니다
이름, 나이, 색상은 속성입니다
노래 부르기와 춤은 행동입니다
파이썬에서 OOP 개념은 반복되지 않는 코드를 생성하는 데 중점을 둡니다. 이 개념은 DRY(Don't Repeat Yourself)라고도 합니다.
파이썬에서 OOP 개념은 몇 가지 기본 원칙을 따릅니다:
상속 | 기존 클래스를 수정하지 않고 새 클래스의 세부 정보를 사용하는 과정입니다. |
봉합 | 클래스의 비공개 세부 정보를 다른 객체에 숨깁니다. |
다중형 | 일반 작업 개념을 다른 데이터 입력에 대해 다른 방식으로 사용합니다. |
클래스는 객체의 블루프린트입니다.
클래스는 레이블이 달린 파랑새의 스케치로 볼 수 있습니다. 그것은 이름, 색상, 크기 등 모든 상세 정보를 포함하고 있습니다. 이 설명을 기반으로 파랑새를 연구할 수 있습니다. 여기서 파랑새는 객체입니다.
파랑새 클래스의 예시는 다음과 같습니다:
class Parrot: pass
여기서는 class 키워드를 사용하여 빈 클래스 Parrot를 정의합니다. 우리는 클래스에서 예시를 생성합니다. 예시는 특정 클래스에서 생성된 특정 객체입니다.
객체(예시)는 클래스의 예시입니다. 클래스를 정의할 때는 단지 객체의 설명을 정의합니다. 따라서 메모리나 저장소가 할당되지 않습니다.
파랑새 클래스 객체의 예시는 다음과 같습니다:
obj = Parrot()
여기서 obj는 Parrot 클래스의 객체입니다.
파랑새의 상세 정보를 가정해 보겠습니다. 아래에서는 파랑새의 클래스와 객체를 구축하는 방법을 보여드리겠습니다.
class Parrot: # 클래스 속성 species = "파랑새" # 예제 속성 def __init__(self, name, age): self.name = name self.age = age # Parrot 클래스 예제화 blu = Parrot("쥐", 10) woo = Parrot("고양이", 15) # 클래스 속성 접근 print("{}는 {}입니다".format(blu.__class__.species)) print("{}는 {}입니다".format(woo.__class__.species)) # 예제 속성 접근 print("{}가 {}세입니다".format(blu.name, blu.age)) print("{}가 {}세입니다".format(woo.name, woo.age))
프로그램을 실행하면 다음과 같은 출력이 됩니다:
쥐는 새입니다 고양이는 새입니다 쥐는 10 세 고양이는 15 세
위의 프로그램에서는 이름이Parrot의 클래스. 그런 다음, 우리는 속성을 정의합니다. 속성은 객체의 특징입니다.
를 생성합니다Parrot클래스의 예제. 여기서는blu과woo는 우리의 새 객체의 참조(값)입니다.
그런 다음, 우리는 class .species를 통해 클래스 속성을 접근합니다. 클래스의 모든 예제의 클래스 속성은 동일합니다. 비슷하게, 우리는 blu.name와 blu.age를 통해 예제 속성을 접근합니다. 그러나 클래스의 각 예제에 대해 예제 속성은 다릅니다.
클래스와 객체에 대한更多信息를 알고 싶다면 다음을 방문하십시오Python 클래스와 객체
메서드는 클래스 본체 내에 정의된 함수입니다. 이들은 객체의 행동을 정의하는 데 사용됩니다.
class Parrot: # 예제 속성 def __init__(self, name, age): self.name = name self.age = age # 예제 메서드 def sing(self, song): return "{}가 {}을 부릅니다".format(self.name, song) def dance(self): return "{}가 지금 춤을 추고 있습니다".format(self.name) # 예제 객체화 blu = Parrot("Blu", 10) # 예제 메서드 호출 print(blu.sing("'Happy'")) print(blu.dance())
프로그램을 실행하면 다음과 같은 출력이 됩니다:
Blu가 'Happy'를 부릅니다 Blu가 춤을 추고 있습니다
위의 프로그램에서는 sing()와 dance() 두 가지 메서드를 정의했습니다. 이 메서드들은 예제 메서드라고 불리는 이유는 예제 객체(즉 blu)에서 호출된다는 것입니다.
상속은 기존 클래스를 수정하지 않고 사용하는 방법을 새로운 클래스로 생성하는 방법입니다. 새로 만들어진 클래스는 자식 클래스(또는 자식 클래스)입니다. 마찬가지로 기존 클래스는 부모 클래스(또는 부모 클래스)입니다.
# 기본 클래스 class Bird: def __init__(self): print("농담이 준비가 되었습니다") def whoisThis(self): print("농담") def swim(self): print(" 더 빠르게泳ぐ 수 있습니다") # 자식 클래스 class Penguin(Bird): def __init__(self): # call super() function super().__init__() print("펭귄이 준비가 되었습니다") def whoisThis(self): print("펭귄") def run(self): print(" 더 빠르게 달릴 수 있습니다") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()
프로그램을 실행할 때, 출력은 다음과 같을 것입니다:
농담이 준비가 되었습니다 펭귄이 준비가 되었습니다 펭귄 더 빠르게泳ぐ 수 있습니다 더 빠르게 달릴 수 있습니다
위의 프로그램에서는 두 개의 클래스를 생성했습니다.Bird(부모 클래스)와Penguin(자식 클래스)。자식 클래스는 부모 클래스의 기능을 상속받습니다. swim() 메서드에서 이를 볼 수 있습니다. 자식 클래스는 부모 클래스의 행동을 다시 수정합니다. whoisThis() 메서드에서 이를 볼 수 있습니다. 또한, 새로운 run() 메서드를 생성하여 부모 클래스의 기능을 확장할 수 있습니다.
또한, init() 메서드 앞에 super() 함수를 사용합니다. 이는 init() 메서드의 내용을 부모 클래스에서 자식 클래스로 가져오고자 하는 이유입니다.
Python에서 OOP를 사용하면, 메서드와 변수에 대한 접근을 제한할 수 있습니다. 이렇게 하면 데이터가 직접 수정되지 않도록 할 수 있습니다(포장이라고 합니다). Python에서는 다음과 같은 언어표기법을 사용하여 프라이빗 속성을 나타냅니다. 단일 "_" 또는 더블 "__".
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("판매가: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # 가격 변경 c.__maxprice = 1000 c.sell() # 사용자 정의 함수 c.setMaxPrice(1000) c.sell()
프로그램을 실행할 때, 출력은 다음과 같을 것입니다:
가격: 900 가격: 900 가격: 1000
위의 프로그램에서, 우리는 다음을 정의했습니다Computer클래스. 우리는 __init__() 메서드를 사용하여 컴퓨터의 최고 판매 가격을 저장합니다. 가격을 변경하려고 시도했지만, Python은 변경을 허용하지 않습니다.__maxprice비공개 속성으로 간주됩니다. 값을 변경하려면 setter 함수를 사용해야 합니다. 즉, setMaxPrice() 함수는 price를 매개변수로 가집니다.
다중 형성은 OOP에서 공통 인터페이스를 여러 형태(데이터 타입)에 사용하는 기능입니다.
가장자리를 칠해야 하는 경우 여러 가지 형상 옵션이 있습니다. 하지만, 어떤 형상에도 동일한 방법으로 칠할 수 있습니다. 이 개념은 다중 형성으로 알려져 있습니다.
class Parrot: def fly(self): print("고슴도치는 날 수 있습니다") def swim(self): print("고슴도치는 수영을 못합니다") class Penguin: def fly(self): print("펭귄은 날 수 없습니다") def swim(self): print("펭귄은 수영을 합니다") # 일반 인터페이스 def flying_test(bird): bird.fly() # 예제화 대상 blu = Parrot() peggy = Penguin() # 대상 전달 flying_test(blu) flying_test(peggy)
위의 프로그램을 실행할 때, 출력은 다음과 같을 것입니다:
고슴도치는 날 수 있습니다 펭귄은 날 수 없습니다
위의 프로그램에서, 우리는 두 개의 클래스를 정의했습니다Parrot과Penguin각각은 일반적인 fly() 메서드를 가지고 있습니다. 그러나, 그들의 기능은 다릅니다. 다중 형성을 허용하기 위해 일반 인터페이스를 생성했습니다. 즉, flying_test() 함수는 어떤 대상도 받을 수 있는 함수입니다. 그런 다음, flying_test() 함수에 peggy를 전달했습니다.blu과peggy대상, 그것이 효과적으로 실행됩니다.
프로그래밍을 간단하고 효율적이게 합니다.
클래스는 공유 가능하므로 코드를 재사용할 수 있습니다.
프로그래밍 인력의 생산성을 높입니다
데이터 추상화를 통해 데이터는 안전합니다.