面向对象学习笔记2

类:(模板)
人:身高、体重、身体、头发、、、、
设定一些参数:生成这些实例:男人、女人、外国人

类的存在必要?
分类:基于数据或者状态的管理。

人:人类
鸟:鸟类
动物:哺乳类

类具备这两个特征:
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 子类名(基类名)
子类里面必须调用基类的带有参数的构造函数
子类可以调用基类的属性和方法。
(子类是否可以调用基类的私有变量?)不能
(方法名里面带有一个__的叫做私有方法子类是不能继承使用的)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值