Day15类和对象
1.内置类
内置类属性就是魔法属性
魔法属性:属性名的前面和后面都有两个下划线
魔法方法:方法的前后都有两个下划线
- 1.name属性 --- 类的名字(是个字符串)
- 2.class属性 --- 获取对象对应类(是一个类)
- 3.dict属性 --- 将对象属性及其对应的值转换成键值对存到一
- 4.doc属性 --- 获取类的说明文档
- 5.module属性 ---获取类所在模块对应的名字
- 6.bases属性 --- 获取当前类的父类
2.slots魔法
通过slots中存的元素的属性的值来约束当前这个类的对象的属性。对象的属性只能比元祖中的元素少,不能多!
class Person:
__slots__ = ('name', 'age', 'face')
def __init__(self):
self.name = '张三'
self.age = 18
self.face = 70
self.jj =80#错误
3.属性的私有化
python中并没有真正的私有化!
python的类中默认的属性和方法都是公开
1.私有化
a.类中的属性和方法都可以通过在属性名和方法名前加两个下划线,来让属性和方法变成私有的。
b.私有的属性和方法只能在当前的类中使用
2.私有化原理
python中并没有真正的私有化!
python的类中默认的属性和方法都是公开
python的类中默认的属性和方法都是公开
在类的外面不能直接使用私有的属性
class Person:
__number = 1#私有化属性
4.getter和setter
1.保护类型的属性:
a.就是在声明对象属性的时候在属性名前加一个下划线来代表这个属性是受保护的属性。
那么以后访问这个属性的时候就不要直接访问,要通过getter来获取这个属性的值,setter来给这个属性赋值
b.如果一个属性已经声明称保护类型的属性,那么我们就需要给这个属性添加getter。也可以添加setter
2.添加getter
添加getter其实就是声明一个没有参数有一个返回值的函数。作用是获取属性的值
a.格式:
@property
def 去掉下滑线的属性名(self):
函数体
将属性相关的值返回
b.使用场景
场景一:如果想要获取对象的某个属性的值之前,想要再干点儿别的事情(做额外的处理)。就可以给这个属性添加getter
场景二:想要拿到某个属性被使用的时刻
3.添加setter
添加setter就是声明一个有一个参数但是没有返回值的函数。作用是给属性赋值
a.格式
b.使用场景
在给属性赋值前想要再干点儿别的实行,就给属性添加setter
5.方法和init()方法重写:
子类继承父类,拥有父类的属性和方法以后,还可以再添加自己的属性和方法
1.添加方法和类的字段
直接在子类中声明相应的方法和字段
2.添加对象属性
对象的属性是通过继承父类的init方法而继承下来
如果想要在保留父类的对象的同时添加自己的对象属性,需要在子类的init方法中通过super()去调用父类的init方法
3.方法的重写
在子类中重新实现父类的方法,就是重写
方式一: 直接覆盖父类的实现
方式二: 保留父类的功能再添加其他功能
class Animal:
"""动物类"""
number = 100
def __init__(self):
self.age = 0
self.sex = '雌'
def shout(self):
print('嗷嗷叫')
def eat(self):
print('吃东西')
class Cat(Animal):
"""猫类"""
def __init__(self):
# 调用父类的init方法
super().__init__()
self.name = '小花'
foot = '鱼'
def shout(self):
print(super())
print('喵喵~')
class Dog(Animal):
"""狗类"""
def shout(self):
# 通过super()调用父类的方法,保留父类的功能
super().shout()
print('汪汪!!')
6.运算符重载:
如果希望类的对象支持相应的运算符操作(例如:+, -, *, /, >, <等),就必须实现相应的魔法方法。
这个过程就叫运算符的重载
+: add()
: gt
class Student:
def init(self,name,age,score):
self.name=name
self.age=age
self.score=score
def add(self,other):
return self.score + other.score
def gt(self,other):
return self.score > other.score
def str(self):
return str(self.dict)[1:-1]
if name == 'main':
stu1 = Student('小明', 18, 90)
stu2 = Student('老王', 29, 84)
stu3 = Student('小花', 20, 78)
print(stu1 > stu2)
print(stu1 < stu2)
print(stu1 + stu2)
print(stu3 > stu1)
True
False
174
False