目录
1 面向对象编程介绍
<1> 面对过程
根据业务逻辑从上到下编写代码
<2> 面向对象
将数据与方法一起进行封装,面向对象基于面向过程
三大特性:封装,继承,多态
<3> 对象
某个具体事务
<4> 类
具有共同特征和行为的一组对象,由三个部分构成:名称、属性、方法
2 定义类
语法
class 类名():
方法
新式类
class 类名(object):
经典类
class 类名():
class 类名:
object 是Python 里所有类的最顶级父类,命名规则按照"大驼峰命名法",实例方法中第一个参数为self,表示实例对象本身。
3 创建对象
格式
对象名 = 类名()
4 对象的属性
1 添加获取对象的属性
实例化对象本身有类自带的属性,也可以自己添加属性,如:
# 定义一个"人"类
class People(object):
# 实例方法
def eat(self):
print('我需要吃饭')
men = People()
# 实例对象自己添加的属性name
men.name = 'zhangsan'
2 实例方法内通过self获取对象的属性
# 定义一个"人"类
class People(object):
# 实例方法
def eat(self):
print('我需要吃饭')
def info(self):
# 通过self.xx获取对象属性name
print('名字为:%s'% self.name)
men = People()
# 实例对象自己添加的属性name
men.name = 'zhangsan'
3 魔法方法
定义:两个下划线开始,两个下划线结束的方法
<1> __init__
实现属性初始化或赋值,可自定义,如不写此方法,python会自己创建,但不执行任何操作,即类中一定有此方法,创建对象后会默认被调用。
<2> __str__
用来显示数据,该方法需要return一个数据,只有self一个参数,通常返回一个字符串;
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__(self)
方法,那么就会打印从在这个方法中 return
的数据。
<3> __del__
当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
当使用del() 删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。
5 继承
<1>继承
一个父类可以派生多个子类,子类可以使用父类的属性和方法,即为继承
<2>单继承
子类只继承一个父类
<3>多继承
子类继承多个父类
- 多继承可以继承多个父类,也继承了所有父类的属性和方法
- 注意:如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)
- 多个父类中,不重名的属性和方法,不会有任何影响。
<4>子类重写父类的同名属性和方法
子类和父类的方法名和属性名相同,则默认使用子类,即子类重写父类的同名属性和方法
<5>子类调用父类的同名属性和方法
父类名.属性名或方法名(self),实例化对象通过self传递来控制方法和属性的访问修改。
<6>多层继承
子子类继承自子类,子类继承父类,这样子子类继承了子类和父类的所有属性和方法
super()可以在子类中调用父类的属性和方法,且只执行一次:
如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,目前super()不支持执行多个父类的同名方法)
6 私有属性和私有方法
<1>私有权限
私有属性与公有属性区别:属性名及方法名前加两个下划线的为私有
- 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
- 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问;
- 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。
<2>修改私有属性的值
定义get_xx()获取私有属性的值,set_xx()修改私有属性的值
<3>多态
定义时的类型与运行时不一样
鸭子类型:虽然我想要一只"鸭子",但是你给了我一只鸟。 但是只要这只鸟走路像鸭子,叫起来像鸭子,游泳也像鸭子,我就认为这是鸭子。
<4>类属性和实例属性
class People(object):
sex = '男' # 类属性
def __init__(self,name,age):
self.name = name # 实例属性
self.age = age # 实例属性
在类外修改类属性
<5>类方法和静态方法
类方法:是类对象所拥有的方法,需要用修饰器@classmethod
来标识,第一个参数必须是类对象,一般为 cls,能够通过实例对象和类对象去访问,类方法可以对类属性进行修改
静态方法:需要通过修饰器@staticmethod
来进行修饰,不需要参数,能够通过实例对象和类对象去访问
<6>__new__方法
-
__new__
至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供 -
__new__
必须要有返回值,返回实例化出来的实例,这点在自己实现__new__
时要特别注意,可以return父类__new__
出来的实例,或者直接是object的__new__
出来的实例 -
__init__
有一个参数self,就是这个__new__
返回的实例,__init__
在__new__
的基础上可以完成一些其它初始化的动作,__init__
不需要返回值