>  기사  >  백엔드 개발  >  Python 언어의 객체 지향 프로그래밍 소개(코드 포함)

Python 언어의 객체 지향 프로그래밍 소개(코드 포함)

不言
不言앞으로
2019-03-09 13:56:352886검색

이 기사는 Python 언어(코드 포함)에 대한 소개를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. .

Python 언어의 객체 지향

객체 지향 프로그래밍, 즉 OOP에서는 캡슐화, 상속, 클래스와 같은 개념이 자주 언급됩니다.
객체 지향의 기원: 모든 것이 객체라는 철학을 바탕으로 프로그램을 객관화하고 모듈화하는 것이 핵심 아이디어입니다. Python 언어에서 클래스는 Person() 클래스와 같이 클래스 이름을 지정하는 데 일반적으로 사용됩니다. 수업 학생 등 클래스에는 속성과 동작이 있는 경우가 많습니다. 예를 들어 Person 클래스에는 이름, 키, 몸무게 등과 같은 속성이 있습니다. 이러한 Python 동작에는 먹기, 잠자기, 친구 사귀기 등이 포함됩니다. 클래스를 통해 반복되는 코드를 다시 작성하지 않고도 나중에 호출을 쉽게 구현할 수 있어 프로그래밍 효율성이 크게 향상됩니다. 따라서 현재 객체지향 프로그래밍 언어가 널리 사용되고 있습니다.
객체 지향에는 상속, 캡슐화, 다형성이라는 세 가지 주요 특성이 있습니다.

1 상속
상속 개념: 클래스가 다른 클래스를 상속하는 경우 상속받은 클래스를 하위 클래스라고 하고 상속받은 클래스를 상위 클래스라고 합니다.
목적: 코드 재사용을 활성화합니다.
이해하기: 하위 클래스와 상위 클래스의 관계는 일상생활에서의 부모-자식 관계가 아닙니다. 하위 클래스와 상위 클래스의 관계는 is-a 관계입니다. 상위 클래스. 자세한 분류. 예를 들어, dog 클래스가 동물을 상속받는다면 dog은 동물로 이해될 수 있습니다. 상속을 설계할 때 주의하세요.
결과: 상속 후 하위 클래스는 자동으로 상위 클래스의 속성과 메서드를 소유하게 됩니다. 고유한 특성과 메서드를 사용하는 것이 목적이며, 하위 클래스는 상위 클래스의 메서드를 재정의할 수도 있습니다. 즉 메서드를 다시 작성할 수도 있습니다.

2 캡슐화
개념: 정보 은닉이라고도 알려진 캡슐화는 추상 데이터 유형을 사용하여 데이터 및 데이터 기반 작업을 캡슐화하여 분리할 수 없는 독립 엔터티를 형성하고 내부를 숨기는 것을 의미합니다. 최대한 세부적인 내용을 담고, 외부와 연결하기 위해 일부 외부 인터페이스만 유지합니다. 시스템의 나머지 부분은 데이터를 둘러싼 승인된 작업을 통해서만 이 추상 데이터 유형과 통신하고 상호 작용할 수 있습니다. 즉, 사용자는 객체의 내부 메소드에 대한 구현 세부 사항을 알 필요가 없지만 객체가 제공하는 외부 인터페이스(객체 이름 및 매개 변수)에 따라 객체에 액세스할 수 있습니다.
혜택: (1) 명확한 업무 분업. 특정 기능을 구현할 수 있는 코드를 독립된 개체로 캡슐화한 후 각 프로그래머는 필요할 때 이를 호출할 수 있어 전문적인 업무 분업을 실현할 수 있습니다. (2) 정보 은폐 및 구현 세부 사항. 액세스 권한을 제어하면 클라이언트 프로그래머가 보지 않기를 원하는 정보를 숨길 수 있습니다. 예를 들어 고객의 은행 비밀번호를 비밀로 유지해야 하는 경우 해당 고객에 대한 권한만 개발할 수 있습니다.
3 다형성
개념: 같은 것, 같은 메소드가 호출되고 매개변수가 같을 때 동작이 다릅니다.
이해: 하위 클래스는 상위 클래스로 표시되지만 작업을 수행할 때 여전히 자체 메서드를 구현합니다. 상위 클래스로 나타나려면 하위 클래스를 업캐스트해야 합니다. 업캐스팅은 JVM에 의해 자동으로 구현되며 안전하지만 다운캐스팅은 안전하지 않으며 강제 변환이 필요합니다. 하위 클래스가 상위 클래스로 나타나면 고유한 속성과 메서드를 사용할 수 없습니다.
프로세스 지향과 객체 지향의 차이점
프로세스 지향은 문제 해결에 필요한 단계를 분석한 다음 함수를 사용하여 이러한 단계를 단계별로 구현하는 것입니다. 객체 지향은 문제를 구성하는 트랜잭션을 다양한 객체로 분해하는 것입니다. 객체를 설정하는 목적은 한 단계를 완료하는 것이 아니라 문제 해결의 전체 단계에서 무언가의 동작을 설명하는 것입니다.
실생활의 예를 사용하여 프로세스 지향과 객체 지향을 이해할 수 있습니다. 예를 들어, 게임을 마친 후 프로세스 지향 디자인 아이디어는 먼저 문제의 단계를 분석하는 것입니다.
1. 경쟁을 시작하고, 3. 중반을 넘어서고, 4. 승자를 결정합니다. 위의 각 단계를 다른 방식으로 구현하십시오.
문제를 해결하기 위한 객체지향 디자인 아이디어라면. 객체 지향 설계는 다른 관점에서 문제를 해결합니다. 전체 대회는 1. 대회대상 2. 대회규칙 3. 결과평가 등으로 구분할 수 있다.
다음은 Python 언어의 객체 지향 프로그래밍 프로세스를 설명하는 작은 예입니다.

一、
#1 定义一个类,其中类名是学生
#2 学生具有的属性
#3 学生具有哪些行为
#4 具体化两个学生,实例化类型
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu2 = Student()
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.age)
print(stu2.name)
print(stu2.age)

二、
#进一步优化:通过上面的程序我们发现他们最终输出的对象的属性一样,但是事实上他们是两个不同的学生,他们的名字,年龄并不相同,那么接下来需要做的就是给他们各自赋予各自的属性,利用类名.属性=某个值,和方法的调用一样也是类名.方法名
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu1.name="王"
stu1.age = 20

stu2 = Student()
stu2.name = "张"
stu2.age = 50
print(stu1)
print(stu1.name)
print(stu1.age)
print(stu2)
print(stu2.name)
三、
#进一步优化:通过第二个程序我们发现在定义对象的属性时我们还需要将所得属性命名在写一次,这样显然比价麻烦,于是有了更好的属性命名方法,我们可以使用初始化 
def __init__(self,、、、),最后在命名属性的时候只需要在类名后面的括号中填写具体的属性值即可,大大较少了代码量。

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)

self는 클래스가 아닌 클래스의 인스턴스를 나타냅니다. 해당 인스턴스가 클래스의 메서드를 호출하면 self는 해당 객체에 속합니다. , 예를 들어 Student에서 자신을 소개하는 방법을 추가하세요.

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)
intro1 = stu1.intro()
intro2 = stu2.intro()

객체의 속성 및 기타 정보를 고객에게 출력하고 싶은데, 속성이 너무 많아 하나씩 출력하기가 번거로운 경우 다음과 같이 __str__()을 사용할 수 있습니다.

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
    def __str__(self):
        return "%s-%d"%(self.name,self.age)
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")


print(stu1)

如果要是的Python中类的属性值不改变,那么在属性前加两个-,称为私有属性,private
如:
self.__money = money,不能再外面直接访问
print(stu1.__money)报错
但是在内部可以直接使用,如在方法eat中调用
如果属性名前是一个下划线,则他虽然可以在外部访问,但是约定俗成提示不要访问!!!

위 내용은 Python 언어의 객체 지향 프로그래밍 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제