第10次预习课-0829 类

第10次预习课20180829

 

class Person(object):

    def __init__(self,height):

        self.height = height  #状态(属性)

 

    def grow_up(self,age):   #行为

        self.height = self.height + age*10   

 

    def get_height(self):

        return self.height

 

p = Person(100)

p.grow_up(10)

print(p.get_height())

 

  1. 具体以实例的方式来管理有关联的数据
  2. 基于类来继承,进行相关的定制化和扩展

 

类:属性+操作这些属性的方法组成

类-》构造函数(设定一些参数)-》具体的实例(能够以实例为单位管理(增删改查))

 

定义个学生的类:
属性(构造方法__init__方法):
name
school
grade
course: 学习了哪些课程,默认为空
course_grade: 每个课程的分数,默认为空

行为:操作这些属性的方法
方法1:设定这个学生学习哪些课程,用一个list来表示
方法2:获取这个学生所有学习的课程(打印)
方法3:设定这个学生所有课程的成绩,用dict来表示
方法4:获取这个学生所有的学习成绩。(打印)

做2个实例,调用所有的方法1次,传入不同的数据

class Student(object):
    '''一个学生的类'''
    def __init__(self,name,school,grade,course=[],course_grade={}):
        self.name = name
        self.school = school
        self.grade =grade
        self.course = course
        self.course_grade = course_grade

    def get_course(self):
        print (self.course)

    def set_course(self,course):
        self.course = course

    def set_course_grade(self,course_name,course_mark):
        if course_name not in self.course:
            return 0
        else:
           self.course_grade[course_name] =course_mark
           return 1

    def get_course_grade(self):
        print (self.name+"的学习成绩如下:")
        for course_name,course_mark in self.course_grade.items():
            print ("%s:%s" %( course_name, course_mark))

s1 = Student("小吴","清华大学","计算机系1年级")
s2 = Student("小李","北京大学","计算机系4年级")
        
s1.set_course(["数据结构","数据库","自动化测试"])
s2.set_course( ["离散数据","c 语言","操作系统"])
s1.get_course()
s2.get_course()

s1.set_course_grade("数据结构",100)  
s1.set_course_grade("数据库",80) 


s2.set_course_grade("离散数据",90) 
s2.set_course_grade("操作系统",70) 

s1.get_course_grade()
print("*"*50)
s2.get_course_grade()

 

定义一个类变量

class Student(object):
    '''一个学生的类'''
    student_num =0
    def __init__(self,name,school,grade,course=[],course_grade={}):
        self.name = name
        self.school = school
        self.grade =grade
        self.course = course
        self.course_grade = course_grade
        Student.student_num+=1

    def get_course(self):
        print (self.course)

    def set_course(self,course):
        self.course = course
  
    def get_student_num(self):
        return Student.student_num

s1 = Student("小吴","清华大学","计算机系1年级",["高等数据"],{"高等数据:100"})
s2 = Student("小李","北京大学","计算机系4年级")

print(s1. get_student_num ())
print(s2. get_student_num ())

 

私有的方法

class Student(object):
    '''一个学生的类'''
    __student_num =0
    def __init__(self,name,school,grade,course=[],course_grade={}):
        self.__name = name
        self.school = school
        self.grade =grade
        self.course = course
        self.course_grade = course_grade
        Student.__student_num+=1

    def get_name(self):
        return self.__name

    def set_name(self,name):
        self.__name = name

s1 = Student("小吴","清华大学","计算机系1年级",["高等数据"],{"高等数据:100"})
#Student.__student_num =100
s1.set_name("小张")
print(s1.get_name())

 

私有变量,加两个下划线,不允许在外面修改,只能使用实例方法修改。

一般数据要求一定的格式或者合法性的情况下,需要声明为私有变量
防止别人乱改,产生脏数据。怎么限定数据呢?通过实例方法来限定这个私有的数据。

 

继承

class Student(object):

    '''一个学生的类'''

    __student_num =0

    def __init__(self,name,school,grade,course=[],course_grade={}):

        self.__name = name

        self.school = school

        self.grade =grade

        self.course = course

        self.course_grade = course_grade

        Student.__student_num+=1

 

    def get_name(self):

        return self.__name

 

    def set_name(self,name):

        self.__name = name

 

    def get_course(self):

        print (self.course)

 

    def set_course(self,course):

        self.course = course

 

class SeniorStudent(Student):

    #SeniorStudent叫做子类,Student叫做基类

    def __init__(self,name,school,grade,mentor):

        Student.__init__(self,name,school,grade)

        self.mentor = mentor

 

    def get_mentor(self):

        return self.mentor

 

    def set_mentor(self,mentor):

        self.mentor = mentor

 

    def get_course(self): #命名了和父类同名的方法,叫做重写

        print ("此学生的课程:",self.course)

 

s1= SeniorStudent("小吴","清华大学","计算机系1年级","杨振宁")

print(s1.get_mentor())

print(s1.get_name())

print(s1.course)

s1.set_course(["数据结构","编译原理"])

s1.get_course()

 

#继承的好处:具备所有父类的属性和方法

#基于原有的类进行扩展和变更!

#你基于前人的工作成果上,可以进一步进行扩展和升级,优化

 

>>> class A:
...     def __init__(self,a):
...         self.a =a
...
>>> class B(A):
...     pass
...
>>> b = B()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'a'

 

类:
属性:值存实例的一些状态
行为:操作这些属性值

类:模板
实例:模板添加一些参数后生成的对象

类变量:声明在实例方法的外面,类名.类变量或者实例名.类变量
实例变量:声明在实例方法的里面,并且带有self,例如self.a
实例名.a

继承:class 子类名(基类名)

子类里面必须调用基类的带有参数的构造函数

子类可以调用基类的属性和方法。
(子类是否可以调用基类的私有变量?)
(方法名里面带有一个_的叫做私有方法,貌似:子类是不能继承使用的)

posted @ 2018-09-03 17:05  feifei_tian  阅读(79)  评论(0编辑  收藏  举报