zoukankan      html  css  js  c++  java
  • python 类

    在python中,万物皆对象。基本上所有的功能都是用类进行包装。

    首先要说的应该是类的成员属性和成员函数,在调用函数时,一般建议在类中进行调用。

    之后是类的实例化,当写好一个类时,实例化是比较常用的调用类中属性和函数的方法。

    最后是类的三大特性:封装、继承、多态。

    成员属性:

    class A():
        name = 'noname'
        age = 18
    
        def do(self):
            print("do some thing.")

    这里的 name 和 age 就属于A类的一种属性,意思就是每一个A,都会有自己的name和age,他们可以不同,但不能没有。

    do是一个包装在A类中的函数,我们建议用先实例化,在调用该函数。

    实例化:

    a = A()
    
    print(a.name)
    print(a.do())

    实例化的方法:

    一个对象名 = 类名(带传入的参数)

    这里要说明的是,实例化的对象可以是多个,例:

    b = A()
    print(b.age)
    print(b.do())
    • 对于传入参数的说明:

    传入哪些参数是由__init__中传入的变量来决定的。

    class Teacher():
        name = ''
        age = 18
    
        def __init__(self):
            print('调用了init函数')
    class Teacher():
        name = ''
        age = 18
    
        def __init__(self, name, age):
            print('调用了init函数')

    同样进行实例化时,t = teacher()

    第二种写法会报以下错误:

    TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'

    面向对象的三大特性:

    继承:

    继承是一个类获得另一个类的成员属性和成员方法

    作用:可以减少代码的量,增强复用功能,同时可以说明两个类之间的关系。

    被继承的类叫做父类(基类,超类)

    继承别人类的类叫做子类(派生类)

    class People():
        name = ''
        age = 18
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self):
            print('eating')
    
    class teacher():
        name = ''
        age = 18
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self):
            print('eating')
    
        def work(self):
            print('{0} is working'.format(self.name))
    
    t = teacher('张三', 20)
    t.work()

    我们可以每一个方法都写一次,但也可以使用继承的思想来写。

    class People():
        name = ''
        age = 18
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self):
            print('eating')
    
    class teacher(People):
    
        def work(self):
            print('{0} is working'.format(self.name))
    
    t = teacher('张三', 20)
    t.work()

    这两段代码有相同的作用,而第二段代码显然简单了许多。

    继承不仅仅有单继承,同时还有多继承,但不建议使用多继承。

    封装:

    封装就是对对象成员的访问进行限制。

    封装的三个级别:

    public:     公开的

    protected:受保护的

    private:    私有的

    _XXX: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,

    __XXX: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

    多态:

     多态是不同的 子类对象调用相同的父类方法,产生不同的执行结果,可以增加代码的外部调用灵活度,

    • 多态以 继承 和 重写 父类方法 为前提
    • 多态是调用方法的技巧,不会影响到类的内部设计

     我认为多态就是为了解决多继承的问题,而python天然的支持多继承,多态在python中就显得不那么重要了,但是多继承有多继承的缺点,

    所以,我们这里提供了另一个方法,mixin模式。

    Mixin设计模式

    • 首先它必须表示某一种功能,而不是某个物品,如同Java中的Runnable,Callable等
    • 其次它必须责任单一,如果有多个功能,那就写多个Mixin类
    • 然后,它不依赖于子类的实现
    • 最后,子类即便没有继承这个Mixin类,也照样可以工作,就是缺少了某个功能。
  • 相关阅读:
    未能加载包“Microsoft SQL Server Data Tools”
    SharePoint 客户端对象模型共用ClientContext的坑
    安装VisualStudio 2015 x64 中文企业版失败
    Could not load file or assembly 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0 系统找不到指定的文件。
    为Sharepoint 2010 批量创建SharePoint测试用户
    User Profile Service Application 配置同步连接时,报 MOSS MA not found
    SharePoint 2010 系统账户没完全控制权限了
    百度编辑器 UEditor 报错汇总
    更改SharePoint 2007/2010/2013 Web 应用程序端口号
    SharePoint 2013 报:网站在改进过程中处于只读状态,对此给您带来的不便,我们深表歉意
  • 原文地址:https://www.cnblogs.com/abc23/p/10273201.html
Copyright © 2011-2022 走看看