Python 面向对象基础知识

面向对象基础知识

 

 

1.什么是面向对象编程?

- 以前使用函数

- 类 + 对象

 

2.什么是类什么是对象,又有什么关系?

 

class 类:
  def 函数1():
    pass
  def 函数2():
    pass

# obj是对象,实例化的过程
obj = 类()
obj.函数1()

 

========== 面向对象不好 ============

========== 函数编程好 ==============

 

 - 有时候,函数编程能实现?比较麻烦。

 - 面向对象非常的简单就能实现。

 

3.什么时候适用面向对象?

- 1.当多个函数有公共的参数的时候

- 2.根据一个模板创建某些东西

- 3.链接服务器,执行命令,关闭

注:面向对象,可以进行更多的修改需求修改。

 

4.self就是调用当前方法的对象。

- 函数(方法)保存在类里面。

- 字段保存在对象内存下。

 

 

 

5.静态字段的使用场景。

- 创建的每一个字段都有共同的值,就可以设置为静态字段。

 

成员属性

class Foo:

  def __init__(self,name):

    #普通字段,属性

    self.NAME = name

    self.Country = "中国"

 

全局属性

class Foo:

  #静态字段,公有属性

  Country = "中国"

  def __init__(self,name):

    self.NAME = name

 

 

6.面向对象三大特性,继承,封装,多态。

封装:

- 类中封装:字段,方法

- 对象中封装了:普通字段的值

 

例子

class F1:

  def __init__(self,n):

    self.N = n

    print('F1')

 

class F2:

  def __init__(self,arg1):

    self.a = arg1

    print('F2')

 

class F3:

  def __init__(self,arg2):

    self.b = arg2

    print('F3')

 

o1 = F1('alex')

o2 = F2(o1)

o3 = F3(o2)

########### 输出Alex:o3.b.a.N###########

#o1 = F1('alex')

#o2 = F2(o1)

#o3 = F3(o2)

#print(o3.b.a.N)

#执行结果

#alex

#注: o3包含o2包含o1包含N赋值alex。

 

 

继承:

例子:

求出结果:对应继承。

class F1:

   def __init__(self):

      print('F1')

 

    def a1(self):

        print('F1a1')

    def a2(self):

        print('F1a2')

 

 

class F2(F1):

    def __init__(self):

        print('F2')

    def a1(self):

        print('F2a1')

    def a2(self):

        self.a2()

        print('F2a2')

 

 

class F3(F2):

    def __init__(self):

        print('F3')

 

# def a1(self):

# print('F3a1')

 

def a2(self):

    print('F3a1')

 

obj = F3()

obj.a1()                        

 

 

多态:

- python:默认支持多态,没有类型限制

- 多态:多种形态。

 

 

7.字段与方法

字段:

普通字段(保存在对象中)

静态字段(保存在类中)

 

方法:

普通方法(保存在类中,调用者对象,至少有一个self参数)

class F1:

    ...

    def a1(self):

        print(self.name)

 

obj = F1()

obj.a1 = a1()

# 注:obj 对象内存没有存入数据,会占用内存。    

 

 

静态方法(保存在类中,调用者类,无需创建对象,可以有任意个参数):

class F1:

    @staticmethod

    def a1():

        print(self.name)

 

F1.a1()

# 注:相当于函数 @staticmethod。

 

 

8.知识总结

  属性

    1.实例变量 (实例内存)

    2.类变量(类内存)

    3.私有属性_var

  方法

    1.构造方法

    2.析构函数

    3.私有方法

 

对象

  实例化一个类后得到的对象

 

封装

  把一些功能的实现细节不对外暴露

 

继承

  做用:代码的重用

  1.继承组合

      class Foo(object):

        def __init__(self,name,age,sex,类元素)#析构函数

          super(Teacher,self).__init_(name,age,sex)#继承

          self.person = Person(self,job) #组合,关联两个基类

 

          #相当于实例化了一个类

          self.类名 = 类元素 #以组合的形式实现代码的重用。

 

  2.单继承

  3.多继承      

      2.7经典类,深度优化,新式类,广度优先

      3.x均是广度优先
      class Foo(object): #都写新式类

        def __init__(self,name,age,sex,salary)#析构函数

 

          #新式类写法,推荐

          super(Teacher,self).__init_(name,age,sex) #继承父类,先重构侯后继承。

 

          #经典类写法,单个继承父类,不推荐

          SchoolMember.__init__(self,name,age,sex) #继承父类

 

多态

接口重用,一种接口多种实现

一种接口,可以自动匹配多个实例

posted @ 2017-11-12 13:31  kevin.Xiang  阅读(440)  评论(0编辑  收藏  举报