类:(模板)
人:身高、体重、身体、头发、、、、
设定一些参数:生成这些实例:男人、女人、外国人
类的存在必要?
分类:基于数据或者状态的管理。
人:人类
鸟:鸟类
动物:哺乳类
类具备这两个特征:
1 状态(属性):
人:头发、眼睛、鼻子、胳膊、腿(个数、长度或者大小)
2 行为:
改变状态的方式
1岁,10岁----->状态发生了一些变化
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 set_course(self,course):
self.course = course
def get_course(self):
print(self.course)
def set_course_grade(self,course_name,grade):
if course_name not in self.course:
return 0
else:
if (grade > 100 or grade < 0) and isinstance(grade,(int,float)):
return 0
self.course_grade[course_name] = grade
return 1
def get_course_grade(self):
print(self.name+"的学习成绩如下:")
for course,grade in self.course_grade.items():
print("%s:%s" %(course,grade))
def get_grade_info(self):
print("此人的班级:",self.grade)
s1 = Student("小吴","清华大学","计算机系1年级")
s2 = Student("小李","北京大学","计算机系4年级")
s1.set_course(["数据结构","数据库","自动化测试"])
s2.set_course(["离散数据","c语言","操作系统"])
s1.get_course()
s2.get_course()
s1.set_course_grade("数据结构",100)
s2.set_course_grade("离散数据",90)
s1.set_course_grade("数据库",80)
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 set_course(self,course):
self.course = course
def get_course(self):
print(self.course)
def get_student_num(self):
return Student.student_num
s1 = Student("小吴","清华大学","计算机系1年级")
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年级")
#Student.__student_num = 100
s1.set_name("小张")
print(s1.get_name())
#print(Student.__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
class 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
s1 = SeniorStudent("小吴","清华大学","计算机系1年级","杨振宁")
print(s1.get_mentor())
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 set_course(self,course):
self.course = course
def get_course(self):
print(self.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
s1 = SeniorStudent("小吴","清华大学","计算机系1年级","杨振宁")
print(s1.get_mentor())
print(s1.get_name())
print(s1.course)
s1.set_course(["数据结构","编译原理"])
s1.get_course()

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 set_course(self,course):
self.course = course
def get_course(self):
print(self.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()

继承的好处:具备所有父类的属性和方法
基于原有的类进行扩展和变更。
你基于前人的工作成果上,可以进一步进行扩展和升级,优化。
总结:
类:
属性:指存实例的一些状态
行为:操作这些属性值
类:模板
实例:模板添加一些参数后生成的对象
类变量:声明在实例方法的外面,类名. 类变量或者实例名.类变量
实例变量:声明在实例方法的里面,并且带有self,例如self.a
实例名.a
继承:class 子类名(基类名)
子类里面必须调用基类的带有参数的构造函数
子类可以调用基类的属性和方法。
(子类是否可以调用基类的私有变量?)不能
(方法名里面带有一个__的叫做私有方法子类是不能继承使用的)
1287

被折叠的 条评论
为什么被折叠?



