第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())
- 具体以实例的方式来管理有关联的数据
- 基于类来继承,进行相关的定制化和扩展
类:属性+操作这些属性的方法组成
类-》构造函数(设定一些参数)-》具体的实例(能够以实例为单位管理(增删改查))
定义个学生的类:
属性(构造方法__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 子类名(基类名)
子类里面必须调用基类的带有参数的构造函数
子类可以调用基类的属性和方法。
(子类是否可以调用基类的私有变量?)
(方法名里面带有一个_的叫做私有方法,貌似:子类是不能继承使用的)