欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初始Python面向对象概念(三)

程序员文章站 2024-03-17 17:18:58
...

Python之面向对象

一切万物皆为对象!

一、面向对象的三大特征

封装、继承、多态

1.1、封装


也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

1.2、继承


所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

1.3、多态


所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

案例(继承):

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "YanZanG"

class People(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def tall(self):
        return f"{self.name}-{self.age}-{self.sex}"


class Yankai(People): # 儿子类(父类)
    def __init__(self,name,age,sex,hobby):
        super().__init__(name,age,sex)
        self.hobby = hobby

    def play(self):
        print(f"{self.name}--{self.age}--{self.sex}--{self.hobby}")

P1 = Yankai("延凯",90,"男","Python")
P1.play()
>>>延凯--90--男--Python
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "YanZanG"

class People(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def tall(self):
        return f"{self.name}-{self.age}-{self.sex}"


class Yankai(People):
    def __init__(self,name,age,sex,hobby):
        super().__init__(name,age,sex)
        self.hobby = hobby

    def play(self):
        print(f"{self.name}--{self.age}--{self.sex}--{self.hobby}")

P1 = Yankai("延凯",90,"男","Python")
P1.play()

if isinstance(P1, People):
    print("P1是Yankai的实例")
else:
    print("P1不是People的实例")
>>>延凯--90--男--Python
P1是Yankai的实例

案例(多态):

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "YanZanG"


class School(object):
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def out(self):
        return f"{self.name}--{self.age}--{self.sex}"


class Student(School):
    def __init__(self,name,age,sex,course,tuition):
        super().__init__(name,age,sex)
        self.course = course
        self.tuition = tuition

    def introduction(self):
        return f"大家好我叫{self.name}我今年{self.age}我是{self.sex}的我的课程是{self.course}我交了{self.tuition}元"


class Teacher(School):
    def __init__(self,name,age,sex,grade,salary):
        super().__init__(name, age, sex)
        self.grade = grade
        self.salary = salary

    def introduction(self):
        return f"大家好我是{self.name}老师,今年{self.age}我是{self.sex}的 我的班级是{self.grade}我的工资为{self.salary}元"


if __name__ == '__main__':
    T1 = Teacher("Yanzan", 30, "男", "Python全栈开发班", 100000, )
    print(T1.introduction())

    S1 = Student("ZhangSan", 11, "女", "Python开发", "20000")
    print(S1.introduction())


>>>大家好我是Yanzan老师,今年30我是男的 我的班级是Python全栈开发班我的工资为100000元
>>>大家好我叫ZhangSan我今年11我是女的我的课程是Python开发我交了20000元

结合Python类的特殊方法如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "YanZanG"


class School(object):
    __slots__ = ("name","age","sex")
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return f"{self.name}--{self.age}--{self.sex}"


class Student(School):
    __slots__ = ("name","age","sex","grade","tuition")
    def __init__(self,name,age,sex,grade,tuition):
        super().__init__(name,age,sex)
        self.grade = grade
        self.tuition = tuition

    def introduction(self):
        return f"大家好我叫{self.name}我今年{self.age}我是{self.sex}的我的课程是{self.grade}我交了{self.tuition}元"

    def __str__(self):
        return f"{self.name}--{self.age}--{self.sex}--{self.grade}--{self.tuition}"


class Teacher(School):
    __slots__ = ("name", "age", "sex", "grade", "salary")
    def __init__(self,name,age,sex,grade,salary):
        super().__init__(name, age, sex)
        self.grade = grade
        self.salary = salary

    def introduction(self):
        return f"大家好我是{self.name}老师,今年{self.age}我是{self.sex}的 我的班级是{self.grade}我的工资为{self.salary}元"

    def __str__(self):
        return f"{self.name}--{self.age}--{self.sex}--{self.grade}--{self.salary}"

    def __eq__(self, other):
        return self.grade == other.grade


if __name__ == '__main__':

    T1 = Teacher("Yanzan", 30, "男", "Python全栈开发班", 100000)
    print(T1.introduction())
    print(T1)

    S1 = Student("XiaoHong", 12, "女", "Python全栈开发班", 100000)
    print(S1.introduction())
    print(S1)


    if T1 == S1:
        print(f"T1和S1都是一个班级的")
    else:
        print("T1和S1不在一个班级")


# 输出结果
大家好我是Yanzan老师,今年30我是男的 我的班级是Python全栈开发班我的工资为100000元

Yanzan--30--男--Python全栈开发班--100000

大家好我叫XiaoHong我今年12我是女的我的课程是Python全栈开发班我交了100000元

XiaoHong--12--女--Python全栈开发班--100000

T1和S1都是一个班级的

初始Python面向对象概念(三)