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类,也照样可以工作,就是缺少了某个功能。

 

posted @ 2019-01-15 17:34  安智伟  阅读(531)  评论(0编辑  收藏  举报