2018-09-07day15-类和对象(2)

2018-09-07  本文已影响0人  猫爱老鼠丶

一、内置类属性

内置类属性就是魔法属性
魔法属性:属性名的前面和后面有两个下划线
魔法方法:方法的前后都有两个下划线
1.__name__属性 --- 类的名字(是个字符串)
类的属性
2.__class__属性 --- 获取对象对应的类(是一个类)
对象的属性
3.__dict__属性 --- 将对象和类的属性及其对应的值转换成键值对存到一个字典中
4.__doc__属性 --- 获取类的说明文档
5.__model__属性 --- 获取类所在模块对应的名字
6.__boss__属性 --- 获取当前类的父类

二、slots魔法

通过__slots__中存的元素的属性的值来约束当前这个类的对象的属性,对象的属性只能比元祖中的元素少,不能多!

class Person:
    __slots__ = ('name','age','face')
    def __init__(self):
        self.name = '张三'
        self.age = 18
        self.face = 70
        # self.sex = 'boy' # __slots__中并没有sex()

注意:一旦在类中给__slots__属性赋了值,那么这个类的对象的__dict__属性就不能用了

三、属性的私有化

python中并没有真正的私有化
python的类中默认的属性和方法都是公开的

1.私有化

2.私有化的原理
在前面有两个下划线的属性名和方法名前添加了_类名来阻止外部通过直接访问属性名来使用属性

四、属性的setter和getter

1.保护类型的属性:

2.添加getter

添加getter其实就是声明一个没有参数有一个返回值的函数
a.格式:

@property
def 去掉下划线的属性名(self):
    函数体
    将属性相关的值返回

b.使用场景
场景一:如果先要获得对象的某个属性的值之前,想要干点别的事情,就可以给这个属性添加getter
场景二:想要拿到某个属性被使用的时刻

3.添加setter

a.格式:

@去掉下划线的属性名.setter
    def 去掉下划线的属性名(self,参数):
          self.属性名 = 参数

b.使用场景
在给属性赋值前想要干点别的事情,就给属性添加setter

五、继承

python中的类可以继承,并且支持多继承。
程序中的继承:就是让子类直接拥有父类的属性和方法(继承后父类中的内容不会因为被继承而减少)

1.继承的语法

class 类名(父类):
    类的内容

注意:如果声明类的时候没有写继承,那么这个类会自动继承python的基类--object;相当于class类名(object),python中的所有类都是直接或间接的继承自object

2.能继承哪些东西

六、方法的重写

子类继承父类,拥有了父类的属性和方法以后,还可以添加自己的属性和方法

1.添加方法和类的字段

直接在子类中声明相应的方法

2.添加对象的属性

对象的属性是通过继承父类的init方法而继承下来的,如果想要保留父类的对象的同时,添加自己的对象属性,需要在子类的init方法中通过super()去调用父类的init方法

3.方法的重写

在子类中重新实现父类的方法,就是重写
方式一:直接覆盖父类的实现
方式二:保留父类的功能在添加其他功能

4.类中方法的调用过程

先在当前这个类中去找,没有就去父类中找,找不到再去父类的父类中找,依次类推,如果在基类中都没有找到才崩溃,在第一次找到的位置去调用
注意:使用super的时候必须是通过super()来代替父类或者是父类对象

七、运算符的重载

如果希望类的对象支持相应的运算符操作(例如:+, -, *, /, >, <),就必须实现相应的魔法方法
这个过程就叫运算符的重载

+:add()
>:gt()
...
一般情况需要对>或者<进行重载,重载后可以通过sort方法直接对对象的列表进行排序

# 重载 + 符号
    # self:+前面的对象
    # other:+后面的对象
    def __add__(self, other):
        return self.score+other.score

    # 重载 > 符号
    # 注意:重载 > 和 < 可以只重载一个,另外一个对应的功能自动取反
    def __gt__(self, other):
        return self.age>other.age

    # 重写魔法方法__str__,用来定制对象的打印样式
    def __str__(self):
        return str(self.__dict__)
上一篇下一篇

猜你喜欢

热点阅读