13-面向对象2

一、内置类属性

内置属性 功能
__ 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)