Ygon's Day12_内置类属性_私有属性_继承

1)内置类属性
创建类的时候,系统默认为我们添加的类的属性

  1. 类._ _name __ -获取类的名字
  2. 类.__ _doc __ -获取类的说明文档
  3. 对象._ _class __获取对象对应的类
  4. 对象.__ _dict __获取对象中所有的属性和对应值,以字典形式返回
  5. 类._ _module __获取指定的类声明在那个模块中,返回模块名
  6. 类._ _bases __返回当前类的所有父类

2)slots魔法:

可以通过给slots 字段赋值,来约束有当前类有那些对象属性

当在类中sorts赋值后,当前的对象的--dict--属性无效

3)在很多面向对象语言中会将属性和方法分为公开的、私有的、受保护的。

  1. python中类的内容本质上全部都是公开的,私有和公开都只是约定。
    私有化:内容只能在类的内部使用,不能在 外面使用。在类中的方法名前或者属性名前加两个下划线

  2. 属性保护 -可以通过在对象属性名前加一个下划线,把这个属性标记成受保护类型,为了告诉他人,这个属性在使用时不要直接使用。而是通过getter、setter来使用
    a. getter -获取某个对象属性值之前,想要做些别的操作,那么就给这个属性添加getter

    1. 在对应的属性名前加下划线
    2. 在@property后声明一个函数,函数名和对应属性名相同,函数没有参数,有一个返回值
    3. 获取属性值,通过’对象.属性名‘获取值拿到的值
      b. 给属性赋值之前做别的操作,就给这个属性值添加setter(想要添加setter之前必须现有getter)
    4. 在对应的属性前加下划线
    5. 在@getter.setter后面声明一个函数,这个函数需要一个参数,没有返回值,并且函数名是属性名去掉下划线
    6. 给属性赋值时通过对象.属性名=值得方式赋值
      c.抛出异常:raise 异常类型。raise关键字,异常类型:可以是系统提供得异常类型,也可以是自定义异常类型(必须继承Exception
  3. 自定义异常类型:写一个继承Exception,然后重写——str——方法来自定错误信息

  4. 继承

    1. 什么是继承
      让子类直接拥有父类所有的属性和方法
      父类-被继承者,字类-继承者
      python中所有的类都是直接或者间接的继承object
    2. 怎么继承
      class 字类名(父类名1,父类名2.....)
      类的内容
    3. 怎么添加
      添加字段和方法,直接添加
      添加对象属性(在字类的方法中调用父类的方法:super().父类方法()
  5. 运算符重载:
    1)python中所有的类型都是类,所有的数据都是类的对象
    2)python中使用运算符的时候,实质会去调用这个运算符对应的魔法方法;
    类的对象是否支持相应的运算符,就看这个类中有没有实现对应的魔法方法;

   class Animal:
    def shout(self):
        print('叫唤')
    pass

class Dog(Animal):
    def shout(self):
        print('汪汪')
    pass

class Cat(Animal):
    def shout(self):
        print('喵喵')
    pass

class Student:
    def __init__(self, name, age=0, score=0):
        self.name = name
        self.age = age
        self.score = score

    def __repr__(self):
        return str(self.__dict__)

add是+的魔法方法,self代表+前面的数据,other代码+后面的数据,返回值是运算结果

    def __add__(self, other):
        # self = stu1, other = stu2
        return self.age+other.age
# *的魔法方法
    def __mul__(self, other):
        stus = []
        for _ in range(other):
            stus.append(copy.copy(self))
        return stus

>的魔法方法

注意: >和<的魔法方法只需要实现一个,另外一个自动支持

    def __gt__(self, other):
        return self.score > other.score


def main():
    stu1 = Student('小明', 20, 80)
    stu2 = Student('小花', 18, 90)
    # stu1+stu2 --> stu1.__add__(stu2)
    print('两个学生相加:', stu1 + stu2)
    students = stu1*4
    students[0].name = '小花'
    print(students)

    print(stu1 > stu2)
    print(stu1 < stu2)

    students2 = [stu1, stu2]
    students2.sort()

    # print(students2)

    print(max(students2))
   

你可能感兴趣的:(Ygon's Day12_内置类属性_私有属性_继承)