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

Linux自动化运维——Python(8)(一文搞懂Python中的类和对象 封装 继承 多态特性)

程序员文章站 2022-03-04 13:02:15
...

1.对象和类
         类(Class)是现实或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。
         对象(Object)是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。

        类(Class)是是创建实例的模板  对象(Object)是一个一个具体的实例

2.类的三大特性

(1)封装:顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。所以,在使用面向对象的封装特性时,需要:
          1). 将内容封装到某处
          2). 从某处调用被封装的内容
                1). 通过对象直接调用被封装的内容: 对象.属性名
                 2). 通过self间接调用被封装的内容: self.属性名
                 3). 通过self间接调用被封装的内容: self.方法名()

# 1. 如何定义类(新式类和经典类在py2和py3中不同)
class People:
    def __init__(self, name, age):
        # 3-1). 把对象和对象的属性信息封装起来
        self.name = name
        self.age = age
        # self是实例化的对象本身, 在Python解释器中会自动将对象作为第一个参数传递过来给self
        print("self:", self)
        print("正在执行构造方法init,在实例化对象时自动执行")
    # 在类里面的函数不叫函数,叫方法
    def get_name(self):
        print("正在获取封装的数据, 姓名: ", self.name)

# 2. 如果通过类实例化创建对象
p = People("小明", 18)
# 3-2). 如何获取封装的属性信息?
print("p:", p)
print("名称: ", p.name)
print("年龄: ", p.age)
p.get_name()

p1 = People("张三", 30)
print("名称: ", p1.name)
print("年龄: ", p1.age)

(2)继承

        继承描述的是事物之间的所属关系,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类、扩展类(Subclass),而被继承的class称为基类、父类或超类(Baseclass、Superclass)。

# 父类(基类)-> 子类(扩展类)

# Student作为父类
class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def exam(self):
        print("%s Examing......." %(self.name))

# MathStudent作为子类,继承于Student.
class MathStudent(Student):
    def exam(self):
        # 如何快速调用父类的方法并执行?
        # 方法1:
        # Student.exam(self)
        # 方法2:先找到当前类的父类,再调用父类的方法。(很重要)
        super(MathStudent, self).exam()
        print("数学系的%s正在考试....." %(self.name))

# 实例化对象时,先判断类是否有构造方法, 如果没有,判断父类是否有构造方法.
m1 = MathStudent("张三",20)
print(m1)
print(m1.name, m1.age)
# 执行exam方法时,如果子类有exam方法,优先执行子类的exam方法
m1.exam()

        私有属性与私有方法

class Student(object):
    def __init__(self, name, age):
        self.name = name
        # 私有属性
        self.__age = age

    def get_age(self):
        # 类的内部时可以访问私有属性的
        print("年龄: %s" %(self.__age))

    def __get_info(self):
        print(self.name, self.age)
s = Student("Coco", 18)
# 1.类的外部不能访问私有属性,为什么呢? 因为python解释器自动将私有属性和私有方法改名了, _类名__属性名
# print(s.__age)
# 2. 类的内部能否访问私有属性呢? 可以
s.get_age()
# 3. 类的外部能否执行私有方法?不能, 包括子类或者类外面均不可访问.
s.__get_info()

(3)多态

       多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。通俗来说: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

 

相关标签: 运维开发