#跟着教程学 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班
性别:女
**************************************************

 
原文地址:https://www.cnblogs.com/3lina/p/11843999.html