• #跟着教程学 10、类,面向对象。 +++升级练习题+++


    如何通过python中的方法和属性获取类的属性 

    https://jingyan.baidu.com/album/5bbb5a1bd253bb13eba17914.html?picindex=4

    # coding=utf-8
    class Provice:
        memo = '中国的23个省会之一。'    #静态字段
    
        def __init__(self, name, captial, leader):
            self.Name = name          #动态字段
            self.Captial = captial
            self.Leader = leader
    
        def sports_meet(self):        #动态方法
            print self.Name + '正在开运动会'
    
        @staticmethod                 #静态方法
        def Foo():
            print '每个省都要带头反腐!'
    
    HB = Provice('河北','石家庄','李阳') #HB是对象,括号内属于封装
    SD = Provice('山东', '济南', '王伟')
    
    print HB.Captial
    print HB.memo
    HB.sports_meet()
    Provice.Foo()
    
    
    石家庄
    中国的23个省会之一。
    河北正在开运动会
    每个省都要带头反腐!
    class Cat:
        """定义一个猫类"""
     
        def __init__(self, new_name, new_age):
            """在创建完对象之后 会自动调用, 它完成对象的初始化的功能"""
            # self.name = "汤姆"
            # self.age = 20
            self.name = new_name
            self.age = new_age  # 它是一个对象中的属性,在对象中存储,即只要这个对象还存在,那么这个变量就可以使用
            # num = 100  # 它是一个局部变量,当这个函数执行完之后,这个变量的空间就没有了,因此其他方法不能使用这个变量
     
        def __str__(self):
            """返回一个对象的描述信息"""
            # print(num)
            return "名字是:%s , 年龄是:%d" % (self.name, self.age)
     
        def eat(self):
            print("%s在吃鱼...." % self.name)
     
        def drink(self):
            print("%s在喝可乐..." % self.name)
     
        def introduce(self):
            # print("名字是:%s, 年龄是:%d" % (汤姆的名字, 汤姆的年龄))
            # print("名字是:%s, 年龄是:%d" % (tom.name, tom.age))
            print("名字是:%s, 年龄是:%d" % (self.name, self.age))
     
    # 创建了一个对象
    tom = Cat("汤姆", 30)
    print(tom)
    tom.introduce()

    类属性和类的方法 

    https://www.jianshu.com/p/202a289fb2d9 

    这里需要先理解透。

    升级练习题。

    1、创建Person类,属性有姓名,年龄,性别。

      创建方法printInfo,打印这个人的信息。

    2、创建Teacher类,继承Person类,属性增加学院college,专业professional。

      重写父类方法printInfo,打印老师的所有信息。创建方法teach,返回信息为‘面向对象设计程序’。

    3、创建Student类,继承Person类,属性增加学院college,班级banji。

      重写父类方法printInfo,打印学生的所有信息。

      创建方法learn,参数为Teache对象(注意是对象,不是Teache类,某某老师,这个某某就是对象。),调用Teache类的字段name和方法teach,接受某某老师教授知识,然后打印”我是***,***老师,***我终于学会了! “ 

    4、创建一个老师的对象,打印其详细信息。

    5、创建三个学生的对象,分别打印详细信息。

    6、一个学生对象调用方法learn。

    7、将三个学生添加至列表中,通过循环将列表的对象打印出来。

    先贴一个我自己理解清楚然后改良过的代码。

    # coding=utf-8
    class Person:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def printInfo(self):
            print ('我叫%s,年龄%s,性别%s.' % (self.name, self.age, self.sex))
    
    
    class Teacher(Person):
        def __init__(self, name, age, sex, college, professional):
            Person.__init__(self, name, age, sex)
            self.college = college
            self.professional = professional
    
        # 重写父类方法printInfo
        def printInfo(self):
            print ('我叫%s,年龄%s,性别%s.我是来自%s的一名%s讲师' %(self.name, self.age, self.sex, self.college, self.professional))
    
        def teach(self):
            return '面向对象设计程序'
    
    
    class Student(Person):
        def __init__(self, name, age, sex, college, banji):
            Person.__init__(self, name, age, sex)
            # super(Student, self).__init__(name,age,sex)
            self.collage = college
            self.banJi = banji
    
        # 重写父类方法printInfo
        def printInfo(self):
            print ("我叫%s,年龄%s,性别%s.我是%s%s的学生。" % (self.name, self.age, self.sex, self.collage, self.banJi))
    
        def learn(self,teacher):
            print('我是%s.%s老师,%s,我终于学会了!' %(self.name, teacher.name, teacher.teach()))
    
    
    TC = Teacher('王芳', '36', '','软件学院', '1809班')
    TC.printInfo()
    
    stu1 = Student('李雷', '20', '', '软件学院', '1809班')
    stu1.printInfo()
    stu2 = Student('赵四', '19', '', '软件学院', '1809班')
    stu2.printInfo()
    stu3 = Student('韩梅梅', '19', '', '软件学院', '1809班')
    stu3.printInfo()
    
    stu1.learn(TC)  #注意全局和非全局变量的调用。
    
    student = []
    student.append(stu1.__dict__)  #__dict__类中的属性以字典的形式展示出来
    student.append(stu2.__dict__)
    student.append(stu3.__dict__)
    print student
    decoded_data = repr(student).decode('string_escape')  #字典和列表中,中文字无法正确显示的解决方法。
    print decoded_data
    
    print('*'*50)
    for dict in student:              #student列表里有三个字典,需要把字典单独提出来
        for key in dict:              #从单个字典里提出键。
            #print key, dict[key]     #打印单个字典里的键值对。
            if key == 'name':         #替换键的字
                print ('姓名:'+dict[key])
            if key == 'age':
                print ('年龄:'+dict[key])
            if key == 'sex':
                print ('性别:'+dict[key])
            if key == 'collage':
                print ('学院:'+dict[key])
            if key == 'banJi':
                print ('班级:'+dict[key])
        print('*'*50)

    ----代码分界线,下列为打印出来的内容-----

    我叫王芳,年龄36,性别女.我是来自软件学院的一名1809班讲师
    我叫李雷,年龄20,性别男.我是软件学院1809班的学生。
    我叫赵四,年龄19,性别男.我是软件学院1809班的学生。
    我叫韩梅梅,年龄19,性别女.我是软件学院1809班的学生。
    我是李雷.王芳老师,面向对象设计程序,我终于学会了!
    [{'collage': 'xe8xbdxafxe4xbbxb6xe5xadxa6xe9x99xa2', 'age': '20', 'name': 'xe6x9dx8exe9x9bxb7', 'banJi': '1809xe7x8fxad', 'sex': 'xe7x94xb7'}, {'collage': 'xe8xbdxafxe4xbbxb6xe5xadxa6xe9x99xa2', 'age': '19', 'name': 'xe8xb5xb5xe5x9bx9b', 'banJi': '1809xe7x8fxad', 'sex': 'xe7x94xb7'}, {'collage': 'xe8xbdxafxe4xbbxb6xe5xadxa6xe9x99xa2', 'age': '19', 'name': 'xe9x9fxa9xe6xa2x85xe6xa2x85', 'banJi': '1809xe7x8fxad', 'sex': 'xe5xa5xb3'}]
    [{'collage': '软件学院', 'age': '20', 'name': '李雷', 'banJi': '1809班', 'sex': '男'}, {'collage': '软件学院', 'age': '19', 'name': '赵四', 'banJi': '1809班', 'sex': '男'}, {'collage': '软件学院', 'age': '19', 'name': '韩梅梅', 'banJi': '1809班', 'sex': '女'}]
    **************************************************
    学院:软件学院
    年龄:20
    姓名:李雷
    班级:1809班
    性别:男
    **************************************************
    学院:软件学院
    年龄:19
    姓名:赵四
    班级:1809班
    性别:男
    **************************************************
    学院:软件学院
    年龄:19
    姓名:韩梅梅
    班级:1809班
    性别:女
    **************************************************

    下面这个是在最开始写的练习题,我总的感觉很乱,不太顺畅。要注意类的作用域和全局变量区域,先声明再调用,还要注意大小写的区别。

    # coding=utf-8
    class Person:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def printInfo(self):
            print ('我叫%s,年龄%s,性别%s.' % (self.name, self.age, self.sex))
    
    
    class Teacher(Person):
        def __init__(self, name, age, sex, college, professional):
            Person.__init__(self, name, age, sex)
            self.college = college
            self.professional = professional
    
        # 重写父类方法printInfo
        def printInfo(self):
            print ('我叫%s,年龄%s,性别%s.我是来自%s的一名%s讲师' %(self.name, self.age, self.sex, self.college, self.professional))
    
        def teach(self):
            return '面向对象设计程序'
    
    
    class Student(Person):
        def __init__(self, name, age, sex, college, banji):
            Person.__init__(self, name, age, sex)
            # super(Student, self).__init__(name,age,sex)
            self.collage = college
            self.banJi = banji
    
        # 重写父类方法printInfo
        def printInfo(self):
            print ("我叫%s,年龄%s,性别%s.我是%s%s的学生。" % (self.name, self.age, self.sex, self.collage, self.banJi))
    
        def learn(self,teacher):
            print('我是%s.%s老师,%s,我终于学会了!' %(self.name, teacher.name, teacher.teach()))
    
    # 把学生添加至字典
        def addStudent(self):
            content={}
            content['name'] = self.name
            content['age'] = self.age
            content['sex'] = self.sex
            content['collage'] = self.collage
            content['banJi'] = self.banJi
            student.append(content)   #这里的student注意S是小写,会加入到下面student的空列表中。
    
    
        def show_all(self):
            for dict in student:
                for key in dict.keys():
                    if key == 'name':
                        print ('姓名:' + dict[key])
                    if key == 'age':
                        print ('年龄:' + dict[key])
                    if key == 'sex':
                        print ('性别:' + dict[key])
                    if key == 'collage':
                        print ('学院:' + dict[key])
                    if key == 'banJi':
                        print ('班级:' + dict[key])
                print('*'*50)
    
    student =[]
    
    stu1 = Person('李雷', '20', '')
    stu1.printInfo()
    TC = Teacher('王芳', '36', '','软件学院', '1809班')
    TC.printInfo()
    
    stu2 = Student('赵四', '19', '', '软件学院', '1809班')
    stu2.printInfo()
    stu3 = Student('韩梅梅', '19', '', '软件学院', '1809班')
    stu3.printInfo()
    
    stu1 = Student('李雷', '20', '', '软件学院', '1809班')
    stu1.printInfo()
    stu1.learn(TC)  #注意全局和非全局变量的调用。
    
    stu1.addStudent()
    stu2.addStudent()
    stu3.addStudent()
    
    
    #print student
    #decoded_data = repr(student).decode('string_escape')
    #print decoded_data
    
    Student.show_all(stu3)  

    -------代码分界线----

    我叫李雷,年龄20,性别男.
    我叫王芳,年龄36,性别女.我是来自软件学院的一名1809班讲师
    我叫赵四,年龄19,性别男.我是软件学院1809班的学生。
    我叫韩梅梅,年龄19,性别女.我是软件学院1809班的学生。
    我叫李雷,年龄20,性别男.我是软件学院1809班的学生。
    我是李雷.王芳老师,面向对象设计程序,我终于学会了!
    学院:软件学院
    年龄:20
    姓名:李雷
    班级:1809班
    性别:男
    **************************************************
    学院:软件学院
    年龄:19
    姓名:赵四
    班级:1809班
    性别:男
    **************************************************
    学院:软件学院
    年龄:19
    姓名:韩梅梅
    班级:1809班
    性别:女
    **************************************************

     
  • 相关阅读:
    免费云盘,为什么不用?
    把握linux内核设计思想系列
    volley基本使用方法
    金朝阳——软件測试试题11道题目分享
    可编辑ztree节点的增删改功能图标控制---已解决
    POJ 3370 Halloween treats 鸽巢原理 解题
    Axure RP一个专业的高速原型设计工具
    Linux内核剖析 之 进程简单介绍
    [iOS]怎样在iOS开发中切换显示语言实现国际化
    scp and tar
  • 原文地址:https://www.cnblogs.com/3lina/p/11843999.html
Copyright © 2020-2023  润新知