私有化,拷贝

类中的私有化

我们在创建类后,一般会定义变量。
1.变量有私有变量 和 公有变量xx
2.私有变量有__xx和_x两种形式,前者的私有属性最大,不能让自己的子类和外部访问;而后者可以让自己的子类调用,也不可以让外部访问调用,例如用 from 文件名 import * 来导入另一个个文件时,_x 的不被访问,调用。

property

  1. 私有属性中添加 getter和setter方法
    一般用@property 和 @xx.setter 和@xx.getter
    目的是为了将方法转化为只读 ;重新实现一个属性的设置和读取方式,可做边界判断。

在python中有许多的关键词,再此 我介绍一下 == 和 is 的一点区别。

  1. == 号只是判断两个对象是否相等,两个对象的id可以是不同的,也可以是相同的。
  2. is 是比较两个引用是否指向同一个对象,这两个对象的ID是相同的。
    来举个栗子
a = [1,3,2]
b = a 
if a == b: #在这里,a与b的值是相同的,而且id也是相同的
	print(True) #结果一定是True
else:
print(False)
a = [1,3,2]
b = [1,3,2]
if a == b :#在这里,a与b的值是相同的,但id是不同的
	print(True) #结果一定是True
else:
print(False)
a = [1,3,2]
b = a 
if a is b :#这里的a和b 值相等,而且id也是相等的。
	print(True)#结果是True
else:
	print(False)
a = [1,3,2]
b = [1,3,2]
if a is b :#这里的a和b 值虽然相等,但是id不相等。
	print(True)
else:
	print(False)#结果一定是False

拷贝

浅拷贝
浅拷贝就是拿来用一下,没有给它确切的存储地址。

a = [1,2,3,4]
b = a#这时,就可以当做是b拷贝了a的内容,地址没有发生变化

深拷贝
深拷贝则是复制了内容,到另一个地方,不用因为前者左右

import copy #导入拷贝模块
a = [1,2,3,4]
print(id(a))
b = copy.deepcopy(a)
print(id(b))#id(a)和id(b)l两者是不一样的

浅拷贝对于可变类型和不可变类型的copy是不一样的

# import copy
# #对可变数据
# a = '123'
# b = (4,5,6,)
# d = [a,b]
# print(d)
# c = copy.deepcopy(a)#深拷贝
# bb = c[:]
# print(id(bb))
# print(id(a))
# # if a is c :
# # 	print(True)
# # else:
# # 	print(False)
# '''用直接拷贝的时候(浅拷贝)(就是不使用import copy)
# 不可变数据是浅拷贝, 可变数据是深拷贝'''

猜你喜欢

转载自blog.csdn.net/m0_43434727/article/details/85621852