类的一些内置方法
内置方法
凡是数据类型 都会或多或少带一些 双下方法
双下方法 : __init__
__str__
__xxx__
在各python书种也称为 魔术方法 内置方法
特点:不正经的,调用的时候总是不好好调用
例子:
'abc'.split('b') # 正经调用str类型的split方法
print('abc' + 'efg') # 直观
ret = 'abc'.__add__('efg') # 不直观,不正经调用方法
print(ret)
重要方法
-
__str__
默认打印对象会打印的则是对象的内存地址,但是地址对我来说没有作用类中定义
__str__
方法,return 回来,相当于替换掉 默认打印对象的内存地址,注意 :return回来的必须是一个字符串的内容比如print(obj) (obj是一个对象)的时候,其实总是调用的
obj.__str__()
,打印的是这个方法的返回值方便做打印(类如注释)
# __str__ class Course: course_lst = [] def __init__(self,name,period,price): self.name = name self.period = period self.price = price def __str__(self): return '%s,%s,%s'%(self.name,self.period,self.price) # python = Course('python','6 months',19800) # linux = Course('linux','5 months',17800) # Course.course_lst = [python,linux] # for course in Course.course_lst: # print(course) # 打印一个对象总是打印内存地址,这个数据对我们来说没有用 # 打印这个对象的时候查看这个对象的相关信息
-
__new__
对象在实例化的过程种,程序首先会创建一块内存地址,然后再调用
__init__
,我们在实例化的时候从来没有关心过开辟内存空间的事,因为有人帮我干了,这个帮我们开辟内存空间的就是__new__
方法没有对象没有关系,我们自己可以new一个
- 测试例子
class A: def __new__(cls,*args,**kwargs): print('执行我了') def __init__(self): print('init') self.name = 'alex' A() # 结果 # 执行我了 # 默认来说,__new__方法是替我们开辟内存空间,但是我们这里将__new__执行的改为了打印, # __init__没有内存空间,也就不会执行了 # new是没有self参数
# 算法导论 - 微观
# 23个设计模式 - 宏观