魔法方法(二)
class Dome(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.age == other.age # 这样比较的就是两个对
# 象的age属性
p1 = Dome('张三', 18)
p2 = Dome('李四', 19)
print(p1 == p2) # 没有改之前时False因为比的时内从地址默认调用
# 了__eq__()方法可以在类中重写一个__eq__方法
# 还有很多就不一一举例了:
# != 是__ne__()这个方法
# < 是 __lt__() > 是 __gt__()
# <= 是 __le__() >= 是 __ge__()
# + 是 __add__() - 是 __sub__()
# * 是 __mul__() / 是 __truediv__()
# 转换类型的是 字符串 __str__() 整形__int__()
# 浮点数 __float__()
内置属性(代码还会使用上面的)
可以是用dir(对象名来查看内置属性)如:print(dir(p1)) 生成的是一个集合
其中__slots__可以限制属性个数
对象名.__doc__查看对类的描述
__module__查看当前操作的对象在那个模块
__class__查看对象的类
__dict__这个有几种书写方式如:类名.__dict__这是把类的属性和方法作为一个字典来显示 对象名.__dict__把对象的属性和值作为一个字典来显示
__getitem__使用字典来操作对象这个表示的是可读性
__setitem__这个是可修改性
类属性和对象属性
类属性:它是类对象所拥有的属性,实例对象可以访问但不能被实例属性修改只能通过类对象来修改也可以私有化在属性前面加个__就可以了
对象属性:又叫实例对象属性记录各自的数据互相不干扰
私有属性和方法
格式是:在属性或者方法的前面加个__就可以了
特点是:不能被外面的实例对象来调用如果非要调用也可以使用
对象名.__类名_私有属性名 但是强烈建议不要这么做
类方法和静态方法:
类方法:格式:在类里面定义一个方法使用@classmethob这个装饰器来装饰 特点:第一个参数必须是cls 使用场景是场用于方法中需要使用类对象的方法
静态方法:格式:使用@staticmethob这个装饰器来装饰
特点是: 参数没有类属性 没有对象属性 不需要self这个形参
它可以通过类对象和实例对象来访问
使用场景是:不需要当前对象和类对象可以使用来减少不必要的内存占用和消耗
单例的设计模式:
就是确保这个类只有一个实例对象无论建立多少都只有一个内存地址 可以通过__new__()这个方法来实现 可以用一个类属性来作为if判断的基准 并且调用 cls.__instance = object.__new__(cls) 最后要返回cls.__instance这个值
今天就到这里明天继续