Python语言系统学习14:面向对象程序设计进阶

从事嵌入式系统软硬件设计工作已有将尽20年的时间,在进行硬件目标板调试时,常需要上位机软件支持。在进行上位机软件程序的设计时,采用过VB、VB.net和C++等多种语言,偶然的机会发现Python,接触后,立刻感觉到它的强大,现在我的上位机软件编程只用Python。本系列教程将从基于硬件的上位机软件设计的角度着手,系统介绍Python语言,希望读者通过本系列教程的学习,能够对Python语言立刻学以致用,真正将所学知识应用到项目实践中。

开发环境:Visual Studio Code

操作系统:Microsoft Window 7

Python版本:3.7

参考教材:Python快速编程入门,黑马程序员,人民邮电出版社,2017年9月第1版
 


一、构造方法

类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:

def __init__(self):
    self.data = []

类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。如下实例化类 MyClass,对应的 __init__() 方法就会被调用:

x = MyClass()

当然, __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5

样例:

class people:
    name = ""
    age = 0
    sex = "男"

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

    def OutputName(self):
        strOutput = "我叫" + self.name
        return  strOutput

    def OutputAge(self):
        strOutput = "今年已经" + self.age + "岁了"
        return  strOutput

    def OutputSex(self):
        if self.sex == "男":
            strOutput = "我是一个阳光帅气的男孩,我生命的每一天都充满活力"
        else:
            strOutput = "我是一个温柔漂亮的女孩,我珍惜我生命中的每一分、每一秒"
        return  strOutput
    
    def OutputResume(self):
        strOutput = "    " + self.OutputName() + ","
        strOutput = strOutput + self.OutputAge() + ","
        strOutput = strOutput + self.OutputSex() + "。"
        return strOutput
def Generate(self):
        p = people(self.txtName.text(), self.txtAge.text(), self.txtSex.text()) 
        self.txtResume.setText(p.OutputResume())

二、构造方法在继承中的应用

可以在子类中直接调用父类的方法,其格式是

父类名.方法名

class people:
    name = ""
    age = 0
    sex = "男"

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

    def OutputName(self):
        strOutput = "我叫" + self.name
        return  strOutput

    def OutputAge(self):
        strOutput = "今年已经" + self.age + "岁了"
        return  strOutput

    def OutputSex(self):
        if self.sex == "男":
            strOutput = "我是一个阳光帅气的男孩,我生命的每一天都充满活力"
        else:
            strOutput = "我是一个温柔漂亮的女孩,我珍惜我生命中的每一分、每一秒"
        return  strOutput
    
    def OutputResume(self):
        strOutput = "    " + self.OutputName() + ","
        strOutput = strOutput + self.OutputAge() + ","
        strOutput = strOutput + self.OutputSex() + "。"
        return strOutput
class student(people):
    school = ""
    department = ""

    def __init__(self, name, age, sex, school, department):
        people.__init__(self, name, age, sex)
        self.school = school
        self.department = department

    def OutputSchool(self):
        strOutput = "通过我高中3年的不懈努力,考入了全球最出色的高等院校——" + self.school
        return  strOutput

    def OutputDepartment(self):
        strOutput = "我在该校最有发展前景的" + self.department + "就读"
        return  strOutput
    
    def OutputResume(self):
        strOutput = "    " + self.OutputName() + ","
        strOutput = strOutput + self.OutputAge() + ","
        strOutput = strOutput + self.OutputSex() + "。"
        strOutput = strOutput + self.OutputSchool() + ","
        strOutput = strOutput + self.OutputDepartment() + "。"       
        return strOutput
    def Generate(self):
        s = student(self.txtName.text(), self.txtAge.text(), self.txtSex.text(),
                    self.txtSchool.text(), self.txtDepartment.text())
        self.txtResume.setText(s.OutputResume())

三、方法重写

方法重写即指子类具有父类同名的方法,示例如下:

class people:
    name = ""
    age = 0
    sex = "男"

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

    def OutputName(self):
        strOutput = "我叫" + self.name
        return  strOutput

    def OutputAge(self):
        strOutput = "今年已经" + self.age + "岁了"
        return  strOutput

    def OutputSex(self):
        if self.sex == "男":
            strOutput = "我是一个阳光帅气的男孩,我生命的每一天都充满活力"
        else:
            strOutput = "我是一个温柔漂亮的女孩,我珍惜我生命中的每一分、每一秒"
        return  strOutput
    
    def OutputResume(self):
        strOutput = "    " + self.OutputName() + ","
        strOutput = strOutput + self.OutputAge() + ","
        strOutput = strOutput + self.OutputSex() + "。"
        return strOutput
class student(people):
    school = ""
    department = ""

    def __init__(self, name, age, sex, school, department):
        people.__init__(self, name, age, sex)
        self.school = school
        self.department = department

    def OutputSchool(self):
        strOutput = "通过我高中3年的不懈努力,考入了全球最出色的高等院校——" + self.school
        return  strOutput

    def OutputDepartment(self):
        strOutput = "我在该校最有发展前景的" + self.department + "就读"
        return  strOutput
    
    def OutputResume(self):
        strOutput = people.OutputResume(self)
        strOutput = strOutput + self.OutputSchool() + ","
        strOutput = strOutput + self.OutputDepartment() + "。"       
        return strOutput
    def Generate(self):
        s = student(self.txtName.text(), self.txtAge.text(), self.txtSex.text(),
                    self.txtSchool.text(), self.txtDepartment.text())
        self.txtResume.setText(s.OutputResume())

四、多继承的构造方法

有了上述基础后,我们最后来看一下多继承的构造方法,示例如下:

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

    def OutputName(self):
        strOutput = "我叫" + self.name
        return  strOutput

    def OutputAge(self):
        strOutput = "今年已经" + self.age + "岁了"
        return  strOutput

    def OutputSex(self):
        if self.sex == "男":
            strOutput = "我是一个阳光帅气的男孩,我生命的每一天都充满活力"
        else:
            strOutput = "我是一个温柔漂亮的女孩,我珍惜我生命中的每一分、每一秒"
        return  strOutput
    
    def OutputResume(self):
        strOutput = "    " + self.OutputName() + ","
        strOutput = strOutput + self.OutputAge() + ","
        strOutput = strOutput + self.OutputSex() + "。"
        return strOutput
class lesson:
    def __init__(self, lesson1, lesson2, lesson3, lesson4, lesson5, lesson6):
        self.lesson1 = lesson1
        self.lesson2 = lesson2
        self.lesson3 = lesson3
        self.lesson4 = lesson4
        self.lesson5 = lesson5
        self.lesson6 = lesson6

    def OutputLesson(self):
        strOutput = "    我的学习刻苦努力,已经修完了"
        strOutput = strOutput + self.lesson1 + "、"
        strOutput = strOutput + self.lesson2 + "、"
        strOutput = strOutput + self.lesson3 + "、"
        strOutput = strOutput + self.lesson4 + "、"
        strOutput = strOutput + self.lesson5 + "、"
        strOutput = strOutput + self.lesson6 + "等课程,学习成绩优异"
        return strOutput
class student(people, lesson):
    def __init__(self, name, age, sex, school, department, lesson1, lesson2, lesson3, lesson4, lesson5, lesson6):
        people.__init__(self, name, age, sex)
        lesson.__init__(self, lesson1, lesson2, lesson3, lesson4, lesson5, lesson6)
        self.school = school
        self.department = department

    def OutputSchool(self):
        strOutput = "通过我高中3年的不懈努力,考入了全球最出色的高等院校——" + self.school
        return  strOutput

    def OutputDepartment(self):
        strOutput = "我在该校最有发展前景的" + self.department + "就读"
        return  strOutput
    
    def OutputResume(self):
        strOutput = people.OutputResume(self)
        strOutput = strOutput + self.OutputSchool() + ","
        strOutput = strOutput + self.OutputDepartment() + "。\r\n"   
        strOutput = strOutput + self.OutputLesson() + "。"    
        return strOutput
    def Generate(self):
        s = student(self.txtName.text(), self.txtAge.text(), self.txtSex.text(),
                    self.txtSchool.text(), self.txtDepartment.text(),
                    self.txtLesson1.text(), self.txtLesson2.text(), self.txtLesson3.text(),
                    self.txtLesson4.text(), self.txtLesson5.text(), self.txtLesson6.text())
        self.txtResume.setText(s.OutputResume())

 

任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。

原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。

 

发布了413 篇原创文章 · 获赞 1104 · 访问量 81万+

猜你喜欢

转载自blog.csdn.net/qingwufeiyang12346/article/details/103114368