[패스] [1 파이썬 전에 이해되지]의 객체 지향 (초기 문법)

많은 비디오를 읽거나 알렉스의 쉬운에서 이동, 이해 https://book.apeland.cn/details/155/

객체 지향 프로세스 지향적 VS

1 프로그래밍 패러다임

프로그램이 특정 문법 구조의 프로그래머가 어떻게 작업을 수행하는 컴퓨터에게 공정으로 구성된 + 알고리즘 + 데이터, 프로그램을 위해 프로그래머가 서면으로 작업 결과를 얻을 수 있다는 지침의 집합입니다 코드입니다, 속담, 모든 도로에 인도 로마, 작업을 다양한 방법으로 달성 할 수있는 방법은, 프로그램의 서로 다른 방법의 특성, 즉 패러다임 프로그래밍, 프로그래밍 부문에서 방법을 요약되어있다. 작업의 모든 종류의 문제가 다른 자연 프로그래밍 패러다임에 걸릴 해결하기 위해 다양한 아이디어를 표현, 대부분의 언어는, 프로그래밍 패러다임을 지원 물론, 일부 언어는 동시에 여러 프로그래밍 패러다임을 지원할 수 있습니다. 가장 중요한 두 프로그래밍 패러다임 프로세스 지향 프로그래밍과 객체 지향 프로그래밍입니다.

1.1 프로세스 지향 프로그래밍 (절차 적 프로그래밍)

절차 적 프로그래밍하는 명령어 목록을 사용하여 단계별로 수행 할 작업 컴퓨터를 말한다.

프로세스 지향 프로그래밍이 의존 - 당신이 추측 - 절차, 계산 절차, 과정도 정상으로 알려져있다 수행 할 일련의 단계를 포함 -down 언어 프로그램은 문제에 대한 해결책을 처음부터 끝까지, 위에서 아래, 단계적으로, 위에서 아래로 단계적으로 실행된다. 작은 문제가 될 수있는 간단한만큼이 때까지 기본적인 아이디어는 큰 문제를 해결하기 위해 시작하는 프로그램을 설계하고 많은 작은 문제 또는 하위 프로세스, 분해의 이러한 하위 프로세스의 프로세스를 다시 실행에 큰 문제를 분해 한 후 계속하는 것입니다 작은 단계의 범위 내에서 해결합니다.

예를 들어, 일반적인 프로세스 중심은, 웹 사이트 로그 분석에 대한 수요가, 전자 메일 보고서, 다음 단계로 나누어 전체 프로세스를 생성합니다 :

수집 로그에 대한 각 서버 1. 하나 개 이상의 서버 때문에, 일반적인 외부 서비스

이러한 태양 광, 자외선, 원점의 면적, 장비에 대한 액세스와 같은 분석의 다양한 치수에 로그온을

3. 보고서를 생성, 전송 전자 메일

다음 코드는

# 1 통합 로그 
DEF의 collect_logs () :
  인쇄 ( " 로그 서버 A의 access.log의 GET " )
  인쇄 ( " 로그 서버 B의 access.log의 GET " )
  인쇄 ( " 로그인 서버 C에서 access.log의 GET " )
  인쇄 ( " 와 같은 하나 개의 파일에 로그인을 결합 " )
 
# 2 로그 분석 DEF의 : log_analyze (LOG_FILE)   인쇄 ( " 태양 광, 자외선 분석 ... " )   인쇄 ( " ... 사용자 소스 분석 " )   인쇄 ( " 장치 ... 액세스 해석을 유래 " )   인쇄 ( " 시간 페이지의 분석 .... " )   인쇄 ( " 항목 페이지 분석 .... " )

# 3 리포트 생성 및 배달 DEF의 (Report_data) send_report :   인쇄 ( " 연결 이메일 서버 ... " )   인쇄 ( " 전자 메일 보내기 ... " )

DEF (주) :   collect_logs ()   log_analyze ( ' my_db ' )   send_report ()

IF __name__ ==' __main__ ' :   주 ()

 

이 문제는 프로그램을 수정하려면, 예를 들어, 당신은 또한 변경해야하는 종속의 여러 부분이, 거기에 당신이 변수의 부분에서 프로그램의 시작을 설정 한 경우 1의 값을 수정하는 것이, 분명하다 다른 하위 프로세스가이 변수를 변경하면,이 서브 루틴 당신은 또한 다른 다른 서브 루틴이 프로세스에 의존하고있을 경우, 개정되어야한다는 것을, 제대로 실행 변수의 값에 의존하는 경우, 그것은 일어날 것입니다 프로그램이 성장으로 영향의 시리즈는 어려운이 프로그래밍 방식이 점점 높아집니다 유지합니다.

그냥 프로세스 중심의 접근 방식으로, 어떤 한 번 작업을 할 수있는 간단한 스크립트를 작성하는 경우 우리가 일반적으로 그렇게 생각 그래서 우수하지만, 당신이 처리하려는 경우 작업이 복잡하고 일정하게 반복 및 유지 보수가 필요, 즉, 가장 편리한 객체 지향했다.

1.2 객체 지향 프로그래밍 ( 객체 지향 프로그래밍 )

OOP 프로그래밍은 쉽게 프로그램의 유지 보수 및 확장을 할 수 있기 때문에 현실 세계에 대한 설명, 하나 객체 지향 프로그래밍의 사용을 달성하기 위해 다양한 모델을 만들 수있는 "클래스"와 "객체"의 사용은, 그리고 크게 더 침착되기 위해 개발하는 팀을 가능하게, 쉽게 사람들이 코드 논리를 이해 할 수 있도록 할 수 있습니다 객체 지향 프로그래밍을 기반으로,뿐만 아니라, 프로그램 개발 효율을 향상시킬 수 있습니다.

객체 지향 기능은 여러 코어를 포함

  클래스 클래스

클래스 인 클래스 객체는 동일한 속성 추상, 청사진, 프로토 타입이있다. 이러한 개체 클래스의 정의는 (변수 (데이터))의 일반적인 방법에 포함 된 특성

   Object 객체

, 클래스가 인스턴스화 한 후에 만 ​​프로그램에서 호출 할 필요가있는 클래스의 인스턴스 인 객체의 인스턴스를 여러 개체를 인스턴스화 할 수있는 클래스는 각도 인간이 모든 의미처럼, 서로 다른 속성을 가질 수있다 사람, 모든 사람들이 공통적으로 가지고 전에, 또한 다른있다, 특정 대상을 말한다

  캡슐화 패키지

데이터 및 클래스의 메소드를 포함하는 컨테이너 또는 캡슐로 클래스하게 사용자에게 투명한 외부 호출 내부 데이터 클래스 과제

  상속 승계

서브 클래스를 파생 할 수있는 클래스가 상위 클래스에 정의 된 속성, 방법은 자동으로 서브 클래스에 의해 상속

  다형성 다형성

 다형성은 객체 지향 간단한 점의 중요한 특징이다 : "인터페이스를 구현하는 다양한"그룹 클래스 다른 서브 클래스 유래을 의미하며, 동일 시간에있어서의 각 서브 클래스에 상속되는 동일한 이름 다른 실현을 할 수있는 상위 클래스의 방법은,이 다양한 형태로 같은 일의 쇼입니다.


이 프로그램은 실제로 과정을 추상화 구체적인 세계입니다, 다형성 추상화를 반영, 특정 사물의 일반적인 수를 추출하고,이 추상 일을 통해 다른 특정 사물과의 대화.

그들은 다르게 행동 할 객체의 다른 클래스에 동일한 메시지를 보냈다. 예를 들어, 그래서 당신의 상사가 모든 직원이 아홉시에 일을 시작하는 것이, 그는 단지 아홉시였다 말했다 : 영업 직원에 대한 필요없이 할 수있다 "작업을 시작"말했다 : "판매를 시작,"기술자 말했다 "직원이"한 직원이 작업을 시작할 수있는, 그 라인에 그것을 알고, 추상적 인 일이기 때문에 "기술적 인 작업을 시작합니다." 각 직원의 경우, 물론, 그들은 자신의 임무를 수행 작업을 할 것입니다.

다형성 상위 클래스를 이용해서 물체 서브 같은 객체가 가리키는 오브젝트 아형의 부모 타입에 대한 참조에있어서, 상기 하위 유형을 호출 할 수 있습니다. 전체 코드는 컴파일되고, 호출 방법은 이미 결정되었다 전에 객체의 참조 점은 동적으로 동작시 결합 될 수있다

객체 지향 프로세스 지향적 요약 대 1.3

핵심 프로세스 지향 프로그래밍은 무엇을 취급 할 때, 조립 라인 더 잘 설계보다 잘 생각처럼 프로세스 지향적 디자인입니다 공정 (조립 라인 사고), 단계 문제 해결 과정이다.

장점은 다음과 같습니다 크게 단지 추적, 스택 코드에 다음과 같이 기록 프로세스의 복잡성을 줄일 수 있습니다.

단점은 다음과 같습니다 파이프 라인 또는 프로세스는 문제를 해결하는 데 사용되는 코드는 실제로 몸 전체에 영향을 미칩니다.

객체 지향 프로그래밍은 모든 것이 하나님이 만들 수 있습니다 존재하지 않는 세계의 눈에 존재하는 모든 객체, 객체가 하나님으로 자신을 생각해야하는 이유 이해하는 오브젝트 (하나님의 생각)의 핵심이다. 승려, Shahe 상, 돼지, 원숭이 왕, 모두 : 객체 지향 등 해결해야 할 문제로 서쪽, 좋은 디자인 여행 등의 프로그래밍이 책을 통해 전달하는 토지 등이 문제를 해결하기 위해 필요로 동쪽 다탕은 사명을 생각 자신의 특성 및 능력 여래도 귀신 그룹 배치 갖도록 여행 중에 결합 된 네 멘토링 방지하기 위하여, (이는 각각 오브젝트 속성들 및 방법들에 대응하는 개체의 특성 및 능력의 개념 임)하지만, 재미없는 가지고 죽은, 또한 호위 신들의 그룹에 배치했다, 이러한 객체입니다. 그런 다음 네 신들 멘토링 시작 배우고 악마는 마지막으로 만든 성경을 때까지 서로 싸웠습니다. 여래는 네 개의 과정을 멘토링 무엇인지에 따라 튜브를 선택하지 않을 것입니다.

객체 지향 프로그래밍

장점은 다음과 같습니다 프로그램의 확장 성을 해결하기 위해. 단일 객체의 변경이 즉시 특성과 기술이 게임에서 캐릭터의 매개 변수를 수정하는 등, 시스템에 반영하는 것은 매우 쉽습니다.

단점 : 가난한 제어, 파이프 라인 설계를 할 수 없다하는 것은 매우 정확한 예측 문제 처리 과정과 절차 지향 프로그래밍의 결과 일 수있다, 당신은 객체 사이의 상호 작용에 의해 발생하는 문제를 해결하기 위해 시작하면 객체 지향 프로그래밍 , 심지어 하나님은 예측할 수 없습니다 최종 결과. 우리는 종종 사람들이 수정을 참조 그래서 게임의 매개 변수는이 게임이 균형을 벗어나, 아빠 능력이 칼은 죽음에 3 명이 해킹 표시 부정적으로 이어질 가능성이있다.

시나리오 : 지속적으로 소프트웨어의 요구 변화는 일반적으로 수요의 변화는 등 사용자 층, 인터넷 응용 프로그램, 기업 소프트웨어, 게임,에 대한 좋은 장소에 집중되어 객체 지향 자신의 재능을 보여주기 위해 프로그래밍.

클래스의 2. 정의

클래스 개 : #의 클래스 이름 첫 글자는 혹 몸 대문자 
  d_type = " 북경 "  # 또한 클래스 변수로 알려진 공공 재산, 
  DEF : (자기) say_hi #의 최초의 자체 인스턴스 특정 대신, 자체 인수를 취해야 클래스 메소드를, 설명하지 않는 
    인쇄 ( " 헬로을의 나는 개가, 유형의 내인가 AM " , self.d_type) #이 자기를 추가해야 클래스 속성을 호출 할., 이유는 시청하지

) (= D를 개 #이 개를 생성 예 D2 = 개 () # 개의 인스턴스를 만들 d.say_hi () #의 이 클래스 개 메소드를 호출 d2.say_hi () 인쇄를 (d.d_type) #의 호출 공용 속성 클래스 개

위의 코드는 좋은 개 클래스의 정의입니다 씨는 템플릿에 해당하는 두 살에 해당, 두 예제의 다음 세대, D, D2되었고, 강아지의 혈액이 생성되었다.

d_type는 메모리 개 클래스 자체에 존재하는 공통의 모든 인스턴스 개 클래스를 속성, 클래스 변수입니다. 당신은 같은 장소에 d1.d_type, d2.d_type 메모리 주소를 가리키는 볼 수 있습니다

일반적인 속성 이외에, 그것은 어떤 개인이 없다? 예를 들어, 각 강아지의 이름, 나이, 소유자가없는 동일합니다. 가능한 라인에 다음과 같이 :

클래스 개 : #의 클래스 이름 첫 글자는 혹 몸 대문자 
  d_type = " 북경 "  # 또한 클래스 변수로 알려진 공공 재산, 
  DEF  __init__ : (자기, 이름, 나이, 마스터) #의 의지의 한 예만큼, 초기화 기능을 자동으로 수행 
    인쇄 ( ' 인스턴스 .... 초기화 ' , 이름) 
    self.name = 이름 # self.name가 자신의 인스턴스 변수입니다 
    self.age = 나이 
    self.master = 마스터
  
  DEF say_hi (자동) : #의 클래스의 방법을 당신이 해석하지 않도록 특별히 자체의 대표적인 예 매개 변수 자체를 취해야합니다     인쇄 ( " 안녕하세요,는 I AM 개가, 내 유형입니다 " , self.d_type)# 자기를 추가해야 호출 클래스 속성 싶다. 표 이유
D = 개 ( " 다모 " , 2, " 알렉스 " ) #이 강아지의 인스턴스를 생성하지 않습니다 D2 = 개 ( " 두 개의 계란 " , 3, " " ) #은 개의 인스턴스를 만들 d.say_hi () #의 호출이 클래스 개의 방법 d2.say_hi () 인쇄 (d2.name, d2.age, d2.master) #의 호출 인스턴스 변수를

 

출력을 수행

이 초기화의 예 .... 봉제 
이 예 두 알을 초기화 .... 
안녕하세요,는 I AM 개가 내 유형 입니다 베이징 버스 
의 I AM 개가, 안녕하세요, 내 유형 입니다 베이징 버스 
두 개의 계란 3 잭

우리는 전화하지 않았다 초기화를 (자체, ...), 그러나 같은 초기화 인스턴스 이름, 나이, 다른 속성 친구로 일부 데이터를 초기화하는 데 사용 인스턴스화 초기화 함수를, 불리는, 자동으로 수행됩니다.

이들은 작성 초기화 이름, 나이, 마스터 변수 (자체, XXXX)를 수행 d_type 무엇 차이점은 무엇입니까?

차이는 d_type 개 클래스가 메모리의 각 인스턴스에 대한 그의 기억, self.name, self.age, self.master의 존재의 존재입니다입니다

결국 3.self은 도대체 무슨 일입니까?

자기는, 우리가 처음 철저 그림 참조, 인스턴스화 과정을 이해 무엇을 의미하는지 이해 할;

1. 스텝 1, D = 개 ( "털"2 "알렉스")가 메모리 공간을 적용한 것이며, 변수 이름 D를 가리

STEP 2 2.  초기화 (XXXX)이 메소드는 D의 메모리 공간을 절약하기 위해, 생존 수신 파라미터 초기화를 필요

이름, 나이에 초기화 메서드에 전달 3. 3 단계는, 마스터가 공간 D에 바인딩 할, 당신은 그것을 어떻게 유지? 이 방법의 확산에서의 메모리 공간을 D, 자체 주소가 D를 수신하기 위해 사용된다. D = 개 ( "털"2 "알렉스") 개 (d "봉"2 "알렉스")에 대응하고, 이는 그 이름 self.name = d.name = 이름 동등하다. ( "알렉스", "다모", 2), 도움에 파이썬 인터프리터는 자동으로이 일을하기 위해 개 클래스에는 수동 전송 D, 단지 쓰기 D = 개가 없을 때 우리는 인스턴스입니다.

이것은, 우리는 마침내 이해 원래 자기가 인스턴스 자체를 표현하는 것입니다. 인스턴스화 할 때 파이썬은 자동으로 자기 매개 변수를 통해이 인스턴스 자체에 전달합니다.

그럼 당신 말을 이해하는 척하지만, 당신이 이해하지 않는 코드, 왜 say_hi (자기)의 다음 작품은, 자기를 쓰기? 

def say_hi(self): # 类的方法,必须带一个self参数,代表实例本身
  print("hello , I am a dog,my type is ",self.d_type,self.name) # 想调用类里的属性,都要加上self.

那是因为,你自己也看到了, 这个类的方法其实就是一堆函数对吧。函数被一个实例调用时,它怎么知道是谁在调用它呢? 函数内部要用到一些实例的属性的时候去哪里取呢? 比如在say_hi函数里怎么取到d.name,d.age?只能你先传递给它。 所以这就是为何类下的每个方法第一个参数都要是self,因为是为了接收实例这个对象本身。

*注意:self在实例化时自动将对象/实例本身传给init的第一个参数,你也可以给他起个别的名字,但是正常人都不会这么做,因为你瞎改别人就不认识。

4.属性引用

  4.1类的公共属性引用(类名.属性)

class Dog: # 类名首字母要大写,驼峰体
  d_type = "京巴" # 公共属性,又称类变量
  def say_hi(self):
    print("hello , I am a dog,my type is ",self.d_type)
    print(Dog.d_type) # 查看Dog的d_type属性
    print(Dog.say_hi) # 引用Dog的say_hi方法,注意只是引用,不是调用

  4.2实例属性引用(实例名.属性)

d2 = Dog("二蛋",3,"Jack") # 生成一个狗的实例
d2.say_hi() # 调用狗这个类的方法
print(d2.name, d2.age, d2.master) # 调用实例的属性
print(d2.d_type) # 注意通过实例也可以调用类的公共属性

练习一

设计一个类Person,生成若干实例,在终端输出如下信息

小明,10岁,男,上山去砍柴

小明,10岁,男,开车去东北

小明,10岁,男,最爱大保健

老李,90岁,男,上山去砍柴

老李,90岁,男,开车去东北

老李,90岁,男,最爱大保健

老张…

추천

출처www.cnblogs.com/watalo/p/12305699.html