TASK7类、对象与魔法方法

7.1类与对象

7.1.1类的三种特征
1.封装:信息隐蔽技术,使用class关键字定义类
2.继承:子类自动共享父类之间的数据和方法
3.多态:不同对象对同一方法响应不同的行动

7.1.2 self
python中的self相当于c++中的指针
在类中定义方法时,第一个参数必须是self,在调用时无需提供与self对应的参数

7.1.3公有与私有
在定义私有变量时,只需在函数名或变量名之前加上__即可,这是两个连续的下划线!

7.1.4继承
在定义类时,在圆括号中加入父类的名称即可继承父类中的所有属性与方法,如果在子类中有方法或属性与父类重名,则会自动覆盖父类中的属性或方法

7.1.5类、类对象与实例对象
类对象:创建一个类也就是一个对象在内存中开辟了一块空间,类对象只能有一个
实例对象:通过实例化类创建的对象,实例对象可以有多个
类属性:在类里面类方法外面定义的变量都是类属性,所有实例对象共享类属性
实例属性:实例属性与实例化的对象一一对应,不能共享,仅为自身所用

7.1.6绑定
python中的类方法需要实例才能被调用,不允许直接调用,这就是绑定

7.1.7内置函数
1.issubclass(class, classinfo) 判断前者是否是后者的子类
2.isinstance(object, classinfo) 判断一个对象是否是一个已知的类型
3.hasattr(object, name)判断对象是否包含对应属性
4.getattr(object, name[, default])返回一个对象属性值
5. setattr(object, name, value)设置属性值,该属性不一定存在
6. delattr(object, name)删除属性
7. class property([fget[, fset[, fdel[, doc]]]])在新式类中返回属性值

7.1.8练习题
二、在方法名前面加上连续两个下划线就是私有方法
三、定义方法的时候没有加上self参数
四、

class Ticket():
           price =100
           weekprice = 120
       class ChildTicket(Ticket):
           price = 50
           weekprice = 60
       a=Ticket()
       b=Ticket()
       c=ChildTicket()
       print(a.price+b.price+c.price)

7.2 魔法方法

7.2.1基本的魔法方法
1.init(self[, …]),构造器,当一个实例被创建时调用的初始化方法
2.new(cls[, …]),在对象实例化时,先调用__new__,再调用__init__,对当前类实例化并将实例返回
3.del(self) 析构器,当一个对象要被系统回收时调用的方法
4.strrepr,打印对象,使用%s格式化以及str强制类型转换时调用的方法,两者又有区别,str(self) 返回结果可读性更强而__repr__(self) 返回结果更精确

7.2.2算术运算符
1.add(self, other) 定义加法行为
2. sub(self, other) 定义减法行为
3. mul(self, other) 定义乘法行为
4. truediv(self, other) 定义真除法行为
5. floordiv(self, other) 定义整数除法行为
6. mod(self, other) 定义取模算法行为
7. divmod(self, other) 定义当divmod被调用的行为
8. divmod(a, b) 定义把算术结果和余数作为元组返回的行为
9. pow(self, other[, module])定义power被调用或**时的行为
10. lshift(self, other)定义按左移位行为
11. rshift(self, other)定义按右移位行为
12. and(self, other)定义与行为
13. xor(self, other)定义异或行为
14. or(self, other) 定义或行为

7.2.3反算术运算符
反算术运算符与算术运算符一一对应,区别在于方法名前面多了一个r,例如算术运算符__add__的反算术运算符就是__radd__,当文件不支持算术运算符时调用。

7.2.4增量赋值运算符
1.iadd(self, other) 定义赋值加法的行为
2. isub(self, other) 定义赋值减法的行为
3. imul(self, other) 定义赋值乘法的行为
4. itruediv(self, other) 定义赋值真除法的行为
5. ifloordiv(self, other) 定义赋值整数除法的行为
6. imod(self, other) 定义取模算法的行为
7. ipow(self, other[, modulo]) 定义赋值幂算法的行为
8. ilshift(self, other) 定义赋值按位左移的行为
9. irshift(self, other) 定义赋值按位右移的行为
10.iand(self, other) 定义赋值按位与的行为
10. ixor(self, other) 定义赋值按位异或的行为
11. ior(self, other) 定义赋值按位或的行为

7.2.5一元运算符
1.neg(self) 定义正号的行为
2.pos(self) 定义负号的行为
3.abs(self) 定义当abs被调用时的行为
4.invert(self) 定义按位求反的行为

7.2.6属性访问
1.getattr(self, name) 定义当用户试图获取一个不存在的属性时的行为
2.getattribute(self, name) 定义当该类的属性被访问时的行为
3.setattr(self, name, value) 定义当一个属性被设置时的行为
4.delattr(self, name) 定义当一个属性被删除时的行为

7.2.7描述符

  1. get(self, instance, owner)访问属性返回属性的值
  2. set(self, instance, value)在属性分配中调用,不返回任何值
  3. del(self, instance)控制删除操作,不返回任何值

7.2.8迭代器
迭代器是一个可以记住遍历位置的对象,从集合的第一个元素开始访问,直到最后一个元素,且只能前进不能后退。
基本方法:
1.iter(object) 生成迭代器
2.next(iterator[, default]) 返回下一个可迭代对象
将一个类作为迭代器时需要使用两个魔法方法:
1.iter(self) 定义迭代容器中的元素的行为
2.next() 返回下一个迭代器对象

练习题
一、
new(cls[, …]),在对象实例化时,先调用__new__,再调用__init__,对当前类实例化并将实例返回
init(self[, …]),构造器,当一个实例被创建时调用的初始化方法
strrepr,打印对象,使用%s格式化以及str强制类型转换时调用的方法,两者又有区别,str(self) 返回结果可读性更强而__repr__(self) 返回结果更精确
getitem(self, key)定义获取容器中的元素的行为
setitem(self, key, value)定义设置容器中指定元素的行为
二、
class JiShiQi():
def init(self,name):
sum = 0
k =1
self.name = name
print(name)
def start(self):
k=1
for k:
sum+=1
def stop(self):
if sum ==0:
print(‘还未启动’)
else:
k=0
print(sum)
def add(self,*args,**kwargs):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值