python第十四次记录
一、Python 3.x中的属性
1.可读、可写属性
例子:
>>> class Test:
def __init__(self, value):
self.__value = value
def __get(self):
return self.__value
def __set(self, v):
self.__value = v
value = property(__get, __set)
def show(self):
print(self.__value)
>>> t = Test(3)
>>> t.value #允许读取属性值
3
>>> t.value = 5 #允许修改属性值
>>> t.value
5
>>> t.show() #属性对应的私有变量也得到了相应的修改
5
>>> del t.value #试图删除属性,失败
AttributeError: can't delete attribute
2.可读、可修改、可删除的属性。
>>> class Test:
def __init__(self, value):
self.__value = value
def __get(self):
return self.__value
def __set(self, v):
self.__value = v
def __del(self):
del self.__value
value = property(__get, __set, __del)
def show(self):
print(self.__value)
>>> t = Test(3)
>>> t.show()
3
>>> t.value
3
>>> t.value = 5
>>> t.show()
5
>>> t.value
5
>>> del t.value #删除属性
>>> t.value #对应的私有数据成员已删除
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.show()
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.value =1 #为对象动态增加属性和对应的私有数据成员
>>> t.show()
1
>>> t.value
1
二、常用特殊方法
2.1构造函数
Python中类的构造函数是__init__(),一般用来为数据成员设置初值或进行其他必要的初始化工作,在创建对象时被自动调用和执行。如果用户没有设计构造函数,Python将提供一个默认的构造函数用来进行必要的初始化工作。
2.2 析构函数
Python中类的析构函数是__del__(),一般用来释放对象占用的资源,在Python删除对象和收回对象空间时被自动调用和执行。如果用户没有编写析构函数,Python将提供一个默认的析构函数进行必要的清理工作。
2.3 重载
1.除此之外,Python还支持大量的特殊方法,运算符重载就是通过重写特殊方法实现的。
2。重载的概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。
3。Python不支持重载。
三、例题
1.自定义集合。模拟Python内置集合类型,实现元素添加、删除以及并集、交集、对称差集等基本运算。
>>> from mySet import Set #导入自定义集合类
>>> x = Set(range(10)) #创建集合对象
>>> y = Set(range(8, 15))
>>> z = Set([1, 2, 3, 4, 5])
>>> x
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> y
{8, 9, 10, 11, 12, 13, 14}
增加,删除元素
>>> z.add(6) #增加元素
>>> z
{1, 2, 3, 4, 5, 6}
>>> z.remove(3) #删除指定元素
删除成功
>>> z
{1, 2, 4, 5, 6}
>>> y.pop() #随机删除一个元素
11
差集
>>> x - y #差集
{0, 1, 2, 3, 4, 5, 6, 7}
>>> x - z
{0, 3, 7, 8, 9}
>>> x.difference(y)
{0, 1, 2, 3, 4, 5, 6, 7}
并集
>>> x | y #并集
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14}
>>> x.union(y)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14}
交集,对称差集
>>> x & z #交集
{1, 2, 4, 5, 6}
>>> x ^ z #对称差集
{0, 3, 7, 8, 9}
>>> x.symetric_difference(y)
{0, 1, 2, 3, 4, 5, 6, 7, 10, 12, 13, 14}
>>> (x - y) | (y - x)
{0, 1, 2, 3, 4, 5, 6, 7, 10, 12, 13, 14}
测试
>>> x == y #测试两个集合是否相等
False
>>> x > y #测试集合包含关系
False
>>> y > x
False
>>> x > z
True
>>> x >= z
True
>>> z.issubset(x) #测试z是否为x的子集
True
>>> x.issuperset(z) #测试x是否为z的超集
True
>>> 3 in x #测试集合中是否存在某个元素
True
>>> 33 in x
False
>>> len(y) #计算集合中元素个数
6
>>> y.clear()
集合已清空
>>> y.pop()
集合已空,弹出操作被忽略
四、总结
本次记录内容有点难,需要多做例题来巩固
版权声明:本文为qq_51872144原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。