Python 面向对象

目录

1 面向对象编程介绍

<1> 面对过程

<2> 面向对象

<3> 对象

<4> 类

2 定义类

语法

新式类

经典类

3 创建对象

格式

4 对象的属性

1 添加获取对象的属性

2 实例方法内通过self获取对象的属性

3 魔法方法

5 继承

<1>继承

<2>单继承

<3>多继承

<4>子类重写父类的同名属性和方法

<5>子类调用父类的同名属性和方法

<6>多层继承

6 私有属性和私有方法

<1>私有权限

<2>修改私有属性的值

<3>多态

<4>类属性和实例属性

在类外修改类属性 

<5>类方法和静态方法

<6>__new__方法


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>私有权限

私有属性与公有属性区别:属性名及方法名前加两个下划线的为私有

  1. 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
  2. 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问;
  3. 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。

<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__不需要返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值