首页 > 代码库 > python15 - day07 面向对象

python15 - day07 面向对象

1. 面向对象编程

1.1 简介

面向对象的三个特性:封装、多态、继承。

私有方法、私有属性

类变量、实例变量

面向过程编程:告诉计算机一步一步的要做什么。

面向对象编程的简单演示:

#定义一个类
class Dog:
    def __init__(self,name):  #构造函数,在实例化时做一些类的初始化工作。
        self.name = name
    #定义属性
    def bulk(self):
        print("%s:汪汪汪" % self.name)
        
d1 = Dog("")
d2 = Dog("")
d3 = Dog("")
d4 = Dog("")

d1.bulk()
d2.bulk()
d3.bulk()
d4.bulk()

 

执行结果:

C:\Users\liuxiaotao\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/liuxiaotao/Desktop/Python/code/day07/object_dog.py

陈:汪汪汪

王:汪汪汪

张:汪汪汪

李:汪汪汪

 

把一个类编程具体对象的过程,叫做实例化。

1.2 析构函数

在实例释放、销毁的时候自动执行的函数,通常做一些收尾工作,如关闭数据库连接等。如果需要关闭,可以手动del删除对象。

class people(object):
    def __init__(self,name,age,country="china"):
        self.name = name
        self.age = age
        self.country = country
    def eat(self):
        print("%s is eatting" % self.name)
    def __del__(self):
        print("%s is dead" % self.name)
    def sleepping(self):
        print("%s is sleepping" % self.name)

 

备注:该模块执行结束后,会自动执行析构函数,这里是打印一句话。

1.3 私有属性和私有方法

class people(object):
    def __init__(self,name,age,country="china"):
        self._name = name      #私有属性
        self.age = age
        self.country = country
    def _eat(self):            #私有方法
        print("%s is eatting" % self.name)
    def __del__(self):
        print("%s is dead" % self.name)
    def _sleepping(self):
        print("%s is sleepping" % self.name)

 

私有属性和私有方法只能在当前实例中进行调用,该模块以外的实例无法调用。

1.4 继承

# _*_ coding:utf-8 _*_
# Author :kaige

class people:#(经典类写法)

class people(object):(新式类写法)


    def __init__(self,name,age,country="china"):
        self.name = name
        self.age = age
        self.country = country
    def eat(self):
        print("%s is eatting" % self.name)
    def __del__(self):
        print("%s is dead" % self.name)
    def sleepping(self):
        print("%s is sleepping" % self.name)

class men(people):
    def piao(self):                #子类自己定义的方法
        print("piaoing.......done")

m1 = men("kaige",22)
m1.eat()              #继承父类的方法
m1.piao()             #子类自己的方法

 

class people:
    def __init__(self,name,age,country="china"):  
        self.name = name
        self.age = age
        self.country = country
    def eat(self):
        print("%s is eatting" % self.name)
    #def __del__(self):
        #print("%s is dead" % self.name)
    def sleepping(self):
        print("%s is sleepping" % self.name)

class men(people):
    def piao(self):
        print("piaoing.......done")

class women(people):
    def __init__(self,name,age,money):       #给某个类单独添加属性
        people.__init__(self,name,age,country="china")

       super(women,self).__init__(name,age,country="china")#第二种方法


        self.money = money

    def brun(self):
        print("%s brunning......wiht %s done" % (self.name,self.money))

m1 = men("kaige",22)
wo2 = women("xiaoqing",26,2000)
m1.eat()
m1.piao()
print("%s come from %s" % (m1.name,m1.country))
wo2.brun()

 

 

1.5 多继承的优先原则

新式类和经典类的区别在于多继承的顺序问题。

继承原则有广度优先和深度优先两种原则:

  • python3中都是广度优先
  • python2中经典类是深度优先原则,新式类是广度优先原则

 技术分享

技术分享

技术分享

技术分享

 

以上演示因为是python3,遵循广度有限的原则:

技术分享

技术分享

 

1.6 多态

多态特性:一种接口,多种实现

 

python15 - day07 面向对象