灿灿灿的第十四次python记录——python 3.x属性以及常用的特殊方法

  • Post author:
  • Post category: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 版权协议,转载请附上原文出处链接和本声明。