day7 python 面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day7 python 面向对象相关的知识,希望对你有一定的参考价值。

一、创建类和对象

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

 

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

 

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

class Foo:  #创建类+类名称
    def bar(self):  #创建类中的函数
bool=Foo()    #根据类创建函数

 

类中的函数第一个参数必须是self,类中定义的函数叫做 “方法”

# 创建类

class Foo:
     
    def Bar(self):
        print Bar
 
    def Hello(self, name):
        print i am %s %name
 
# 根据类Foo创建对象obj
obj = Foo()
obj.Bar()            #执行Bar方法
obj.Hello(wupeiqi) #执行Hello方法

面向对象:【创建对象】【通过对象执行方法】

二.面向对象三大特性

面向对象的三大特性是指:封装、继承和多态。

一、封装

 

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

 

所以,在使用面向对象的封装特性时,需要:

 

将内容封装到某处

从某处调用被封装的内容

技术分享

self 是一个形式参数,当执行 obj1 = Foo(‘wupeiqi‘, 18 ) 时,self 等于 obj1

 

                              当执行 obj2 = Foo(‘alex‘, 78 ) 时,self 等于 obj2

 

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

 

第二步:从某处调用被封装的内容

 

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

 

通过对象直接调用

通过self间接调用

1、通过对象直接调用被封装的内容

 

上图展示了对象 obj1 和 obj2 在内存中保存的方式,根据保存格式可以如此调用被封装的内容:对象.属性名

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 = obj2,即:self.name 是 alex ; self.age 是 78


 

二、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

 

例如:

 

  猫可以:喵喵叫、吃、喝、拉、撒

 

  狗可以:汪汪叫、吃、喝、拉、撒

 

如果我们要分别为猫和狗创建一个类,那么就需要为 猫 和 狗 实现他们所有的功能,如下所

class 猫:

    def 喵喵叫(self):
        print 喵喵叫

    def 吃(self):
        # do something

    def 喝(self):
        # do something

    def 拉(self):
        # do something

    def 撒(self):
        # do something

class 狗:

    def 汪汪叫(self):
        print 喵喵叫

    def 吃(self):
        # do something

    def 喝(self):
        # do something

    def 拉(self):
        # do something

    def 撒(self):
        # do something

上述代码不难看出,吃、喝、拉、撒是猫和狗都具有的功能,而我们却分别的猫和狗的类中编写了两次。如果使用 继承 的思想,如下实现:

 

  动物:吃、喝、拉、撒

 

     猫:喵喵叫(猫继承动物的功能)

 

     狗:汪汪叫(狗继承动物的功能

class Animal:

    def eat(self):
        print "%s 吃 " %self.name

    def drink(self):
        print "%s 喝 " %self.name

    def shit(self):
        print "%s 拉 " %self.name

    def pee(self):
        print "%s 撒 " %self.name


class Cat(Animal):

    def __init__(self, name):
        self.name = name
        self.breed = 

    def cry(self):
        print 喵喵叫

class Dog(Animal):
    
    def __init__(self, name):
        self.name = name
        self.breed = 
        
    def cry(self):
        print 汪汪叫
        

# ######### 执行 #########

c1 = Cat(小白家的小黑猫)
c1.eat()

c2 = Cat(小黑的小白猫)
c2.drink()

d1 = Dog(胖子家的小瘦狗)
d1.eat()

代码实例

 


以上是关于day7 python 面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈开发,Day7 - 面向对象学习

Python-面向对象-Day7

Python之路_Day7

day7 python 面向对象

面向对象之继承与派生(day7)

Python--day7--面向对象编程进阶