定义函数时,给函数指定缺省值,默认性别是男
parameter参数
给新增参数添加文档注释
填写参数的说明
累加求和
调用带有多值参数的函数时,使用拆包,demo(*gl_nums,**gl_xiaoming)分别将元组和字典传给对应形参,简化参数传递。
递归函数:就是函数内部,自己调用自己,务必要有一个条件判断作为函数的出口。
3+temp
2+temp
1
dir (函数名)查询针对demo对象提供的内置方法或者属性
定义类
仍然是一个引用,等号右边是创建对象,等号左侧的变量是对对象的引用:
创建对象
id(tom)
类可以创建多个对象,每个对象在内存中的地址不同
在类的外部给对象增加属性
在对象调用方法时,方法内部第一个参数self就是变量名tom指向的对象Cat
在方法内部访问对象的属性
在类中使用self参数在类封装的方法中输出对象的属性
self和tom在内存中保存的引用和字符串是一致的
在类的外部给对象增加属性
在类的外部给对象设置属性时,先调用方法,后添加对象的属性,就会在调用方法的时候,程序会报错
在初始化方式中定义属性
del关键字把一个对象从内存中删除
print(tom)
系统默认输出的是创建的对象tom的类名和内存地址
如果希望按自定义格式输出时
可以使用__str__()方法
init初始化方法简化对象创建
str方法简化对象的输出
针对none 使用is判断
继承
class 子类名(父类名)
Dog类是子类,Animal类是父类,Dog类从Animal类继承
也可以说是
Dog类是派生类,Animal类是基类,Dog类Animal类派生
父类的属性和方法,可以不断的向其子类、子类的子类传递
子类拥有父类的方法和属性,同时也拥有父类的父类的方法和属性
有两个派生类
不推荐使用,因为父类名在发生变化时,调用的代码全部需要修改
推荐使用super类创建的对象super().方法名()
python3.0不推荐使用。一旦把父类名记错,写成子类名,会出现死循环。
多继承
以object类作为父类的类是新式类
没有指定object类作为父类的类是旧式类(经典类),不具有object类的方法和属性
在Python 3.0 的解释器中,默认使用新式类(无论是否指定object类)
在定义类的时候,没有确切的类作为父类的时候,都应该使用object类作为父类,保障代码的通用性
dog.game()语句中,不同的狗对象调用父类中的game()方法,产生不同的结果
使用new方法覆盖父类的方法实现,用一个变量接收父类new方法(cls)分配的内存空间,并将地址返回。如果new方法不返回对象的引用,则无法调用初始化方法,并最终返回的对象是一个空对象none
new方法一定要返回父类调用new方法的返回结果,并且new方法是一个静态方法,一定要把cls作为第一个参数
单例创建对象时在内存中只创建唯一一个实例的解决方案:用类属性接收第一分配的内存空间,以后每次创建对象均不再对对象调用new方法,不再做额外的空间分配。只是把类属性记录的第一个对象的引用做一个返回。这样就能做到,无论调用多次创建对象的方法,得到的将都是第一个创建出来的对象的引用。
对new进行改造