美文网首页
13-面向对象2

13-面向对象2

作者: 微醉那一抹殷红 | 来源:发表于2018-08-01 17:39 被阅读0次

    一、内置类属性

    内置属性 功能
    __ name __ 获取类的名字
    __ doc__ 获取类的说明文档
    __ dict __ 获取类属性和其对应的值(键值对形式)
    __ module__ 获取当前类所在的模块名
    __ bases__ 获取当前类的父类



    二、私有化

    • 私有化方法:

    直接在属性名或者方法名前加两个下划线(__属性名)

    • 私有功能

    在外部不能使用,可以在类的内部使用

    • 属性假私有化

    声明属性的时候,在属性名前加一个 ‘ _ ’ ,来告诉他人这个属性是不可以直接使用的。要通过 gettersetter 来获取和修改属性的值

    • getter & setter

    1. getter

    通过 getter 获取值:
    @property
    def 属性名(去掉下划线)(self):
       return 返回值
    

    如果在获取对象的某个属性之前,需要有其他的操作,就给属性添加getter

    2. setter

    通过 setter 赋值
    @属性名(去掉下滑线).setter
    def 属性名去掉下划线(self, 变量名):
       给带下划线的属性赋值
    
    • 使用 setter 前提必须要有 getter
    • 如果在给对象的某个属性赋值前,需要有其他的操作,就需要添加setter
    3.综合实例
    class Student:
        """学生类"""
        def __init__(self):
            # 声明属性的时候前面加一个'_'是为了告诉别人这个属性不能直接使用
            self._name = ''
            self._score = 0
            self._age = 0
    
        #  给属性_name添加getter
        @property
        def name(self):
            return self._name
    
        #  给属性_name添加setter
        @name.setter
        def name(self, value):
            self._name = value
    
        @property
        def age(self):
            return str(self._age)+'岁'
    
        @age.setter
        def age(self, age):
            if age >= 150 or age < 0:
                print('赋值有误,age要求是0-150的值')
                # raise 抛出异常: raise 错误类型
                # raise ValueError
                self._age = None
                return
            self._age = age
    
    
    if __name__ == '__main__':
        stu1 = Student()
        # 不添加getter和setter
        # stu1._name = '张三'
        # print(stu1._name)
    
        # 添加getter和setter
        stu1.name = '李四'
        print(stu1.name)
    
        stu1.age = 20
        print(stu1.age)
    



    三、类的继承

    1.说明:

    一个类继承另一个类的时,它将自动获得另一个类的的所有属性和方法,原有的类称为父类,而新类称为子类

    • 父类:被继承者
    • 子类:继承者
    2. 怎么继承
    class 类名(父类):
        '''类的说明文档'''
       属性
       方法  
    
    • python中所有的类默认继承python的基类 —— object

    3. 哪些内容可以继承

    • 对象的属性和方法,类的字段和类方法,静态方法
    • slots 的值不会被继承
    • getter 和 setter 会被继承





    易竹小居士.jpg

    相关文章

      网友评论

          本文标题:13-面向对象2

          本文链接:https://www.haomeiwen.com/subject/bzervftx.html