Python入门

1. 字符串的方法及注释
2. os、os.path模块中关于文件、目录的函数使用方法
3. python标准异常总结
4. python魔法方法大全
5. python time模块详解

变量私有

在python中定义私有变量只需要在变量名或函数名前面加上“__”就可以了。
调用时,x._类名.变量名

输出

输出:
	print("12345")
------------------------------------------------------------------------------------
输出变量:
	s=123
	print(s)
------------------------------------------------------------------------------------

输入

输入一个数字
	n = input()
------------------------------------------------------------------------------------
输入3个数字
	a, b, n = map(int, input().split())
------------------------------------------------------------------------------------
输入n个数字
	s = list(map(int, input().split()))
------------------------------------------------------------------------------------
输入一段字符
	s = input()
------------------------------------------------------------------------------------
输入n段字符,以空格为分界
	s=list(input().split())
	

分支语句

if  判断条件:
	成立语句
elif 判断条件:
	成立语句
else:
	成立语句
------------------------------------------------------------------------------------
if 3 > 5:
	print("3 > 5")
elif 3 == 5:
	print("3 = 5")
else"
	print("3 < 5")
------------------------------------------------------------------------------------
a = 5
a = (3 if 3 < 5 else 7)
此时a = 3
a = (3 if 3 > 5 else 7)
此时a = 7

且、或、非

1.且:and
	返回值为bool类型
	两边同时成立返回True,否则返回False
	3 < 5 and 5 > 3   :True
	3 < 5 and 5 < 3   :False
	3 > 5 and 5 < 3   :False
------------------------------------------------------------------------------------
2.或:or
	返回值为bool类型
	两边最少有一边成立返回True,否则返回False
	3 < 5 or 5 > 3   :True
	3 < 5 or 5 < 3   :True
	3 > 5 or 5 < 3   :False
------------------------------------------------------------------------------------
3.非:not
	返回值为bool类型
	变真为假,变假为真
	3 < 5    :True
	not 3 < 5    :False

循环

while循环
1.
	while 循环条件:
		条件成立时循环体
------------------------------------------------------------------------------------
2.
	while 循环条件:
		条件成立时循环体
	else:
		条件不成立时执行、只执行一次(指条件不成立时,若使用break跳出循环体依然不会执行该语句)
------------------------------------------------------------------------------------


for循环

1.
	for 变量 in 可迭代对象:
		条件成立时循环体
------------------------------------------------------------------------------------	
2.
	for 变量 in 可迭代对象:
		条件成立时循环体
	else:
		条件不成立时执行、只执行一次(指条件不成立时,若使用break跳出循环体依然不会执行该语句)
------------------------------------------------------------------------------------	
3.
	可迭代对象:不可以直接写整数,例如:
	a = 0
	for i in 10:
		a += i
	不成立,需要使用range
	a = 0
	for i in range(10):
		a += i
	此时a = 45, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
------------------------------------------------------------------------------------
4.
	a = 0
	for i in range(1, 10):
		a += i
	意为从1开始循环到9,i每次+1
	此时a = 45, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
------------------------------------------------------------------------------------
5.
	a = 0
	for i in range(1, 10, 2):
		a += i
	意为从1开始循环到9,i每次+2
	此时a = 25, 1 + 3 + 5 + 7 + 9
------------------------------------------------------------------------------------
6.
	a = 0
	for i in range(10, 1, -1):
		a += i
	意为从10开始循环到2,i每次-1
	此时a = 54, 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2
------------------------------------------------------------------------------------
7.
	a = 0
	for i in range(10, 1, -2):
		a += i
	意为从10开始循环到2,i每次-2
	此时a = 30, 10 + 8 + 6 + 4 + 2
	
	易错点:for后面需要加一个:

列表

1.创建列表
	s = [1, 2, 3, 4, 5, "12345"]
	s = [] :空列表
------------------------------------------------------------------------------------
2.列表遍历全部
	for i in s:
		print(i)
------------------------------------------------------------------------------------
3.通过下标查看列表元素
	print(s[2])
------------------------------------------------------------------------------------
4.获取列表长度
	length = len(s)
------------------------------------------------------------------------------------
4.查看列表最后一个元素
	print(s[len(s) - 1])
	print(s[-1])
------------------------------------------------------------------------------------
5.查看列表第一个元素
	print(s[0])
	print(s[-len(s)])
------------------------------------------------------------------------------------
6。列表遍历部分
	print(s[0:3]):遍历a[0]、s[1]、s[2]
	print(s[3:6]):遍历a[3]、s[4]、s[5]
	print(s[:3]):从头开始遍历到s[2]
	print(s[3:]):从s[3]开始遍历到末尾
	print(s[:]):遍历所有
	print(s[0:6:2]):从s[0]开始遍历到s[5]步长为2
	print(s[::2]):从头开始遍历到末尾步长为2
	print(s[::-2]):从末尾开始遍历到头步长为2
------------------------------------------------------------------------------------
7.列表的增加
	s.append("456789") :在列表的末尾增加一个元素
	s.extend(["456","789","1011"]) :在列表的末尾添加另一个列表
	s.[len(s):] = [5,6,7,"454"] :在列表的末尾添加另一个列表
	s.insert(1,2) : 在下标为1的位置添加一个值为2的元素
------------------------------------------------------------------------------------
8.列表的删除
	s.remove("2") : 删除列表中值为2的元素,如果有多个只删除第一个,如果没有则报错
	s.pop() :删除最后一个元素
	s.pop(2)  :按下标删除列表中的元素
	del s[下标] :按下标删除列表中的元素
	s.clear() :删除全部
	del s :删除全部
------------------------------------------------------------------------------------
9.列表的复制
	s *= 2
------------------------------------------------------------------------------------
10.判断元素是否在列表内
	2 in s  :返回值为True
	"s1234" in s  :返回值为False
	"s1234" not in s  :返回值为True
------------------------------------------------------------------------------------
11.判断列表是否在列表内
	s = [123,456,[789,1234,5678],78910]
	s1 = [789,1234,5678]
	s1 in s
	返回值为True
	
	1234 in s :返回值为False
	1234 in s[2] :返回值为True
	
	s[2][0] :返回值为789
	类似于不等长的二维数组
------------------------------------------------------------------------------------
12.常用内置函数
	s = [123,123,456,789]
	s.count(123) :返回值为2
		查询123出现在s列表内的次数
	s.index(123) :返回值为0
		查询123首次出现在s列表内的位置
	s.index(789,0,4) :返回值为3
		查询789首次出现在列表内下标为[0,4)内的位置
		前闭后开
	s.reverse() 
		将s翻转
	s.sort()
		排序,默认从小到大
	s.sort(reverse = True)
		排序,从大到小
------------------------------------------------------------------------------------
13.列表的拷贝
	s1 = [1,2,3]
	s2 = s1[:]
	!!!!!!!!!千万不能直接用s2 = s1
	s2 = s1[:] :创建一个新的列表,让s2->这个列表
	s2 = s1 :创建一个s2指向s1的那个列表。

元组

元组内的元素无法更改!!

1.元组的创建
	s = (1,2,3,4,5,6,7)
	s = 1,2,3,4,5,6,7
	s = () :空元组
	s = (1,) :一个元素的元组
	s = 1,   :一个元素的元组
	#  s = (1)创建的不是元组而是数字
	#  8 * (8) = 64
	#  8 * (8,) = (8, 8, 8, 8, 8, 8, 8, 8)
------------------------------------------------------------------------------------
2.元素的访问
	s[0]  ;返回值为1
------------------------------------------------------------------------------------
3.对一段元素进行访问
	s[:2] :返回值为(1,2)
------------------------------------------------------------------------------------
4.元组拷贝
	s1 = s[:]
------------------------------------------------------------------------------------
5.元组元素的增加
	s = (1,2,3,4,5,6)
	s = s[:2] + (7,) + s[2:]
	此时s = (1,2,7,3,4,5,6)
------------------------------------------------------------------------------------
6.元组的删除
	s = (1,2,3,4,5,6)
	s = s[:2] + s[3:]
	此时s =(1,2,3,4,5,6)


函数

不能直接在函数体内修改全局变量的值!
全局变量a = 5
在函数体内写a = 6,此时这句话的意思是,创建一个局部变量,变量名为a,值为6,不会对全局变量a造成任何影响。

如果需要修改,则需要使用关键字global
例如:
count = 5
def myFun():
	global count
	count = 10
print(count)#此时输出5,因为未调用函数
myFun()
print(count)#此时输出10
------------------------------------------------------------------------------------

1.函数的创建:
	def func():
		print("嘿嘿嘿")
------------------------------------------------------------------------------------
2.函数的调用:
	func()
------------------------------------------------------------------------------------
3.带参数的函数的创建:
	def func(x,y):
		print(x)
		print(y)
4.带参数函数的调用:
	func("xxx",5)
------------------------------------------------------------------------------------
5.带返回值函数的创建:
	def func(x,y):
		return x + y
6.带返回值函数的调用:
	func("xxx","yyy")
------------------------------------------------------------------------------------
7.带默认值的函数的创建:
	def func(x = 5,y = 6)
		print(x + y)
8.带默认值的函数的调用:
	可以不写实参
	func()
	也可以写
	func(5,7)
	还可以写一部分
	func(y = 4)
	如果fun(4)这样调用,那4会覆盖x的值,y的值不变

	例:gcd
	def gcd(a, b):
		return a if b == 0 else gcd(b, a % b)
	gcd(5,25)
	#输出5
	gcd(6,9)
	#输出3
------------------------------------------------------------------------------------
9.函数文档
	在函数体内,使用单引号''包裹,用于注释文档,例如:
	def gcd(a, b):
		'用于计算最大公约数的函数'
		return a if b == 0 else gcd(b, a % b)
------------------------------------------------------------------------------------
10.函数文档的调用
	gcd.__doc__
	help(gcd)
	只能显示第一条函数文档。
------------------------------------------------------------------------------------
11.关键字参数(在调用的时候写定义函数时的函数名)
	def fun(a,b):
		print(a,b)
		
	fun(6, 5)
	#输出6, 5
	
	fun(b = 6, a = 5)
	#输出5 6
------------------------------------------------------------------------------------
12.收集参数
	def test(*s):
		print("参数的长度是:",len(s))
		print("第二个参数时:",s[1])
	test(1,2,3,4,5,6,7)
	#输出为:
	#参数的长度是: 7
	#第二个参数时: 2
------------------------------------------------------------------------------------
13.函数内同时有收集参数和普通参数
	def test(*s, a):
		print("参数的长度是:",len(s))
		print("第二个参数时:",s[1])
		print(a)
	test(1,2,3,5,6,a = 4),调用时必须使用关键字,否则会按收集参数算
	为了不出错,可以在创建函数时给参数一个默认值
------------------------------------------------------------------------------------
14.内嵌函数
	def fun1():
		print("fun()1正在被调用")
		def fun2():
			print("fun()2正在被调用")
		fun2()
	fun1()
	只有在调用fun1()之后才可以进行fun2()的调用
------------------------------------------------------------------------------------
	15.闭包
	如果在一个内部函数里,对在外部作用域(但是不是全局变量)的变量进行引用,那么内部函数就会被认为是闭包
	def fun1(x):
		def fun2(y):
			return x * y
		return fun2#没有括号
	fun1(8)(5)
	#结果为40
	i = fun1(8)
	
	def fun1():
		x = 5
		def fun2():
			nonlocal x#设置它不是一个局部变量,否贼会在fun2()内创建一个局部变量导致出错
			x *= x
			return x
		return fun2()
------------------------------------------------------------------------------------
16.匿名函数
	原函数:
	def com(x):
		return 2 * x + 1
	使用lambda:
	lambda x : 2 * x + 1
	使用方法g = lambda x : 2 * x + 1
	g(5)
	结果为11
	冒号左面是参数,右面是返回值
------------------------------------------------------------------------------------
17.过滤函数filter
	list(filter(none, [1, 0, False, True]))
	结果为[1,True]
	将所有结果为False的值过滤掉,
	两个参数,第一个参数可以是函数也可以是none,第二个参数是一个可迭代对象。
	
	例:过滤掉偶数
	def odd(x):
		if x % 2 == 0:
			return False
		else:
			return True
	a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
	a = list(filter(odd,a))
	结果为[1, 3, 5, 7, 9]
	a也会变成[1, 3, 5, 7, 9]
	
	a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
	a = list(filter(lambda x : x % 2,a))
	结果为[1, 3, 5, 7, 9]
	a也会变成[1, 3, 5, 7, 9]

字典dict

1.字典的创建
	dict1 = {}
	dict1 = {'a' : 1, 'b' : 'bi', 1 : 'one'}
	print(dict1['a'])#输出结果为1
	dict2 = dict(a = 1, b = 'bi')
------------------------------------------------------------------------------------
2.字典的修改
	dict2['a'] = 2
	对字典内不存在的键进行修改
	dict2['c'] = 5
	
	使用字典对字典进行修改
	dict1 = { 2 : 'one', 1 : 2}
	dict2 = { 2 : 'two'}
	dict1.update(dict2)
	print(dict1)
	结果为:{2: 'two'}
------------------------------------------------------------------------------------
3.字典元素的添加
	dict1 = {}
	dict1 = dict1.fromkeys((1, 2, 3))
	结果为:{1: None, 2: None, 3: None}
	
	dict1 = dict1.fromkeys((1, 2, 3),'Number')
	结果为:{1: 'Number', 2: 'Number', 3: 'Number'}
	
	dict1 = dict1.fromkeys((1, 3),'数字')
	结果为:{1: '数字', 3: '数字'}
	
	dict1 = dict1.fromkeys(range(10), '赞')
	结果为:{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞'}
	
	dict1 ={1 : 'one', 2 : 'two'}
	dict1.setdefault(10)
	结果为:dict1 ={1 : 'one', 2 : 'two', 10 : 'None'}

dict.setdefault(11,'ten')
结果为:dict1 ={1 : 'one', 2 : 'two', 10 : 'None', 11 : 'ten'}
------------------------------------------------------------------------------------
4.字典元素的打印
	访问某一个键值
	print(dict[1])#1不是下标
	print(dict['a'])
	#缺点,当访问字典内不存在的键的时候,会报错
	print(dict.get('a'))
	#此时,若字典内不存在‘a’则会返回None,否则返回该键的值
	print(dict.get('a','没有!'))
	#此时,若字典内不存在‘a’则会返回'没有'!,否则返回该键的值
------------------------------------------------------------------------------------
	打印dict1的所有键:
	for i in dict1.keys():
		print(i,end = " ")
	结果为:0 1 2 3 4 5 6 7 8 9 
	
	打印dict1的所以值:
	for i in dict1.values():
		print(i,end = " ")
	结果为:赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 
	
	同时打印键和值
	for i in dict1.items():
		print(i)
	结果为:
	(0, '赞')
	(1, '赞')
	(2, '赞')
	(3, '赞')
	(4, '赞')
	(5, '赞')
	(6, '赞')
	(7, '赞')
	(8, '赞')
	(9, '赞')
------------------------------------------------------------------------------------
5.判断键是否存在于字典内
	dict1 ={1 : 'one', 2 : 'two'}
	
	1 in dict1	: 返回值为 True
	3 in dict1	: 返回值为 False
------------------------------------------------------------------------------------
6.字典的清空
	dict1 = {1 : 'one', 2 : 'two'}
	dict1.clear()
	不建议使用dict1 = {}
	dict1 = {1 : 'one', 2 : 'two'}
	dict2 = dict1
	此时,会相当于一个指针的名字是dict2指向这个字典,当进行dict1 = {}之后,访问dict2的时候无法访问到元素
------------------------------------------------------------------------------------
7.字典的拷贝
	同样不能使用dict2 = dict1
	dict1 = {1 : 'one', 2 : 'two'}
	dict2 = dict1.copy()
------------------------------------------------------------------------------------
8.字典的弹出
	dict1 = {1 : 'one', 2 : 'two'}
	dict1.pop(1)

集合set

1.集合的创建
	num = {1, 2, 3, 4, 5}
	此时num是一个集合
	当用花括号包裹时,且里面元素都是数字,且没有映射关系时,这就是一个集合。
	
	也可以通过set1 = set([1, 2, 3, 4, 5, 5])来创建一个集合
	
	集合中的元素具有唯一性。
	num = {1, 2, 3, 4, 5, 5, 4, 3, 2}
	此时,集合内元素为{1, 2, 3, 4, 5}
	
	练习:去除list中的重复元素
	num1 = [1, 2, 3, 4, 5, 5, 0]
	num1 = list(set(num1))
	结果为[0, 1, 2, 3, 4, 5]
	#set会自动进行排序
------------------------------------------------------------------------------------
2.集合的访问
	num1 = {0, 1, 2, 3, 4, 5}
	查询某元素是否存在于集合中.
	1 in num1: 返回值为True
	6 in num1: 返回值为False

遍历集合内所有元素
	num1 = {6, 12, 24, 3, 48, 5}
	for i in num1:
		print(i, end = " ")
	结果为 : 3 5 6 12 48 24 
------------------------------------------------------------------------------------
3.添加元素到集合内
	num1 = {0, 1, 2, 3, 4, 5}
	num1.add(6)
	此时:
	num1 = {0, 1, 2, 3, 4, 5, 6}
------------------------------------------------------------------------------------
4.从集合内删除元素
	num1 = {0, 1, 2, 3, 4, 5}
	num1.remove(4)//不是下标
	此时:
	num1 = {0, 1, 2, 3, 5}
	如果元素4不存在,会报错
------------------------------------------------------------------------------------
5.不可变集合(使用关键字frozen)
	num3 = frozenset([1,2,3,4,5])
	可以正常遍历,无法增加修改删除

文件


1.文件的打开
	asas.txt里面的内容为"abc啊defgh"
	f = open('D:\\aaa\\asas.txt','读取方法')
	读取方法默认为只读'r',
	向空文件夹内写入,需要写'w',会覆盖掉原文件夹内所有内容
------------------------------------------------------------------------------------
2.文件的读取
	s = f.read()
	读取全部字节,读取后指针会在最后,不能重复读取
	s = f.read(size = -1)
	当size < 0的时候读取全部字符,否则读取size个字符
	例:s = f.read(5)
	此时s内的内容为:"abc啊d"
	
	x = f.tell()
	显示当前指针所在位置,读取了5个字符,但是有一个中文,一个中文两个字节,所以x的值为6
	
	f.seek(offset, from)
	在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
	例如当前字节为9
	
	
	f.seek(1, 0)
	此时使用s = read(),
	s的值为: "bc啊defgh"
	
	f.readline()只读取一行
	
	显示所有
	for i in f:
		print(i)
------------------------------------------------------------------------------------
3.文字的写入#写入到空文件夹内
	x = f.write('hasasasas')
	返回值为写入了多少个字符,此处x = 9

异常

例:当文件名不存在或其他原因导致无法打开文件时
try:
	f = open('asas.txt')
	print(f.read())
	f.close()
except OSError as reason:
#OSError是错误类型  reason是变量名,用于输出
	print('文件出错,出错的原因是' + str(reason))
------------------------------------------------------------------------------------
一个try可以对应多个exceptexcept后面可以直接加冒号,还可以写多个异常except (OSError, TypeError):

系统一但检测出异常,就不会继续向下运行
------------------------------------------------------------------------------------
try:
	语句
except:
	错误
finally:
	无论如何都会被执行的语句,可以用来关闭文件,防止内存出现问题
------------------------------------------------------------------------------------
with open('asas.txt','w') as f:
	会自动关闭文件 

使用class关键字,类名必须大写
	class Person:
		#方法
		def man(self):
			print('男人')
		def woman(self):
			print('女人')
	经查阅发现:Python在类中定义方法的时候,方法会被传进一个参数,即当前对象的地址,所以一般在类中定义方法的时候,必须在方法中至少定义一个参数。
	一般情况下我们将其命名为"self",但是实例方法的第一个参数不一定要叫self,其实完全可以叫任意参数名.
	比如:a,b,c等等,只是约定俗成的把该参数命名为self,因为这样使代码具有更好的可读性。
	
	如果类中什么都没有,则需要写pass
	class Ss:
		pass
------------------------------------------------------------------------------------
类的继承
	class MyList(list):
	代表MyList这个类继承了list类里面的方法。
------------------------------------------------------------------------------------
多态
	不同对象对同一方法相应不同的行动
	class A:
		def fun(self):
			print('我是小A...')
	class B:
		def fun(self):
			print('我是小b...')
	
	a = A()
	b = B()
	a.fun()		#结果为 : 我是小a...
	b.fun()		#结果为 : 我是小b...
	对不同的对象,调用相同的方法,产生不同的结果
------------------------------------------------------------------------------------
继承、多态的例子:
	class Ball:
		def setPro(self, pro):
			self.pro = pro
	
	class Basketball(Ball):
		def sport(self):
			print('我是%s, 谁打我!' % self.pro)
	
	class Football(Ball):
		def sport(self):
			print('我是%s, 谁踢我!' % self.pro)
	
	b = Basketball()
	f = Football()
	b.setPro('篮球')
	f.setPro('足球')
	b.sport()		#结果为:我是篮球, 谁打我!
	f.sport()		#结果为:我是足球, 谁踢我!
	
	一个父类名字为球类,球类内有一个设置球的名字的方法。
	两个子类名字分别为足球类和篮球类,继承了球类设置名字的方法,并有自己的一个运动方法
	
	方法的重写:若子类中有和父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
	若重写时有需要用到的方法,例如:
	class F:
		def __init__(self):
			self.a = 1;
	class S(F):
		def __init__(self):
			super().__init__()
			self.b = 1
	重写init方法的同时,父类方法中的self.a就不存在了,但是若是想在子类方法中继续使用它,则需要添加super().__init__()。(会自动找到父类)
------------------------------------------------------------------------------------
多重继承:
	class F1:
		def f1(self):
			print('111')
	
	class F2:
		def f2(self):
			print('222')
	
	class S(F1, F2):
		pass
	
	此时,可以同通过
	s = S()
	s.f1()	#结果为111
	s.f2()	#结果为222
------------------------------------------------------------------------------------
组合:
	class A:
		def __init__(self, x):
			self.num = x
			
	class B:
		def __init__(self, x):
			self.num = x
	
	class C:
		def __init__(self, x, y):
			self.x = A(x)
			self.y = B(y)
			#通过这里来调用A类和B类
		def print_num(self):
			print('A的数量为 %d ,B的数量为 %d! ' %(self.x.num,self.y.num))
	
	c = C(1, 10)
	c.print_num()
	结果为: A的数量为 1 ,B的数量为 10! 
------------------------------------------------------------------------------------
属性的名字和方法相同时,属性会覆盖方法!

类和对象一些相关的BIF

1.判断一个类是否是另一个类的子类
	issubclass(class1,class2)
	class A:
		pass
	class B(A):
		pass
	issubclass(B, A)
	返回值为True
	
	比较宽松,一个类被认为是自身的子类
	issubclass(B, B)
	返回值也是True
	
	issubclass(B, object)
	返回值也是True,object是所有类的父类
------------------------------------------------------------------------------------
2.判断一个实例对象是否属于一个类
	isinstance(实例对象,类)
	class A:
		pass
	class B(A):
		pass
	
	b1 = B()
	isinstance(b1, B)
	返回值是True
	isinstance(b1, A)
	返回值也是True,因为B是A的子类
------------------------------------------------------------------------------------
3.判断一个属性名是否在类中
	hasattr(类,属性名)
	class C:
		def __init__(self,x = 0)
			self.x = x
	c1 = C()
	hasattr(c1,'x')
	返回值为True,属性名需要被引号('')所包裹作为字符串传入,否则会报错
------------------------------------------------------------------------------------
4.返回类中的某个属性值
	getatter(类,属性名,[可选可不选]若不存在则返回。。。)
	class C:
		def __init__(self,x = 0)
			self.x = x
	c1 = C()
	getattr(c1, 'x')	返回值为0
	getattr(c1, 'y')	会报错,因为没有写找不到了怎么办
	getatter(c1, 'y', '您错访问的属性不存在')	返回“您所访问的属性不存在”
------------------------------------------------------------------------------------
5.设置类中的某个属性值
	setattr(类名,属性名,值)
	class C:
		def __init__(self,x = 0)
			self.x = x
	c1 = C()
	setatter(c1, 'x', 5)
	如果属性不存在于类中,则创建一个新的属性并完成赋值
------------------------------------------------------------------------------------
6.删除类中的属性
	delattr(类名,属性名)
	class C:
		def __init__(self,x = 0)
			self.x = x
	c1 = C()
	delatter(c1, 'x')
	若属性名不存在,则报错

魔术方法

魔法方法总是被双下划线包围,例如__init__
------------------------------------------------------------------------------------
默认方法,初始化方法 __init__
	def __init__(self):
初始化时使用,相当于JAVA中的实例化类的get和set操作
------------------------------------------------------------------------------------
new方法
	当一个class内的方法不可变的时候,可以使用new方法进行重写,然后重启传回去
	class CapStr(str):
		def __new__(cls, string):
			string = string.upper()
			return str.__new__(cls. string)
	
	a = CapStr('abcde')
	a
此时a的结果为'ABCDE'
------------------------------------------------------------------------------------
del方法,删除实例化类时的操作
	class C:
		def __init__(self):
			print('被调用1')
		def __del__(self):
			print('被调用2')
	c1 = C()	#输出'被调用1'
	c2 = c1
	c3 = c2
	del c1	#无输出
	del c3	#无输出
	del c2	#输出'被调用2'
此时__del__不会被调用,因为还有实例化类c2的存在,当删除掉所有的实例化类的时候,才会调用__del__
------------------------------------------------------------------------------------
算术方法,以int为例:
	__add__
	__sum__
	__mul__
等等,可以对算术方法进行重载
例1class New_int(int):
		def __add__(self, other):
			return int.__sub__(self, other)
		def __sub__(self, other):
			return int.__add__(self, other)
	a = New_int(4)
	b = New_int(5)
	a + b	#结果为:-1
	a - b	#结果为: 92class Try_int(int):
		def __add__(self, other):
			return int(self) + int(self) + int(other)
		def __sub__(self, other):
			return int(self) - int(other) - int(other)
	a = Try_int(10)
	b = Try_int(2)
	a+b		#结果为22
	a-b		#结果为6
	如果不加int进行强转的话会造成无限循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值