python-面向对象(一)——开篇基础

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

 

一、创建类和对象

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

  类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

  对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

  • class是关键字,表示类
  • 创建对象,类名称后加括号即可

 

二、面向对象三大特性

面向对象的三大特性是指:

  • 封装
  • 继承
  • 多态

 

封装:

 
第一步  将内容封装到某处
 
对象中封装了初始化__init__函数下面的变量,还有隐含地指向类的一个类对象指针,把类和对象关联起来。对象通过这个指针来寻找类下面的方法。当执行类下面的方法时,类的方法在去封装在类下面的变量中找需要的变量。
 
第二步  从某处调用被封装的内容
 

调用被封装的内容时,有两种情况:

  • 通过对象直接调用
  • 通过self间接调用
 
1、通过对象直接调用被封装的内容
 
class Foo:
 
    def __init__(self, name, age):
        self.name = name
        self.age = age
 
obj1 = Foo('wupeiqi', 18)
print obj1.name    # 直接调用obj1对象的name属性
print obj1.age     # 直接调用obj1对象的age属性
 
obj2 = Foo('alex', 73)
print obj2.name    # 直接调用obj2对象的name属性
print obj2.age     # 直接调用obj2对象的age属性
 
2、通过self间接调用被封装的内容

执行类中的方法时,需要通过self间接调用被封装的内容
 
class Foo:
  
    def __init__(self, name, age):
        self.name = name
        self.age = age
  
    def detail(self):
        print self.name
        print self.age
  
obj1 = Foo('wupeiqi', 18)
obj1.detail()  
# Python默认会将obj1传给self参数,即obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18
  
obj2 = Foo('alex', 73)
obj2.detail()  
# Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78
 
综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

 

继承

  • 经典类    深度优先
  • 新式类    广度优先  就近原则    前提:如 A多继承 B,C  在B,C都继承了D时 这个规律才有效 ,否则新式类就会先去执行D里面的方法
java、c# 不支持多继承 一个类只能继承一个类

经典类  class:

class D:
    def obj(self):
        print "This is obj :D"
class C(D):
    def obj(self):
        print  "This is obj :C"
class B(D):
    pass
class A(B,C):
    pass

a = A()
a.obj()


=========================

This is obj :D

 

新式类  class(object):  就近原则

class D(object):
    def obj(self):
        print "This is obj :D"
class C(D):
    def obj(self):
        print  "This is obj :C"
class B(D):
    pass
class A(B,C):
    pass

a = A()
a.obj()

========================

This is obj :C

 

 

多态

Pyhon不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

 

原文地址:https://www.cnblogs.com/chenchao1990/p/5377468.html