Python之路【第九篇】:Python面向对象

系统 1566 0

阅读目录

一、三大编程范式

编程范式即编程的方法论,标识一种编程风格:

大家学习了基本的python语法后,大家可以写python代码了,然后每个人写代码的风格不同,这些不同的风格就代表了不同的流派;

如果把python的基本语法比作武术的基本功,那么不同的编程风格就好比不同的武林门派。

虽然大家风格不同,但是都可以完成你的编程需求,python是一门面向对象编程语言,但是目前为止,你从未接触面向对象编程,然而你已经可以解决很多问题了,在python中并没有人强制你使用哪一种固定的风格。

三大编程范式:

1、面向过程编程:

2、函数式编程:

3、面向对象编程:

 

二、编程进化论

1、编程最开始就是无组织无结构,从简单控制流中按步写指令

2、从上述的指令中提取重复的代码块或逻辑,组织到一起(比如说,你定义一个函数),便实现了代码重用,且代码由无结构走向结构化,创建程序的过程变得更具逻辑性

3、我们定义函数都是独立于函数外定义变量,然后作为参数传递给函数,这意味着:数据与动作是分离的

4、如果我们把数据和动作内嵌到一个结构(函数或类)里面,那么我们就有了一个‘对象系统’(对象就是数据与函数整合到一起的产物)。

            #狗的特征
dog1=
            
              {
    'name':'朱锐'
              
                ,
    'gender':'公'
                
                  ,
    'type':'藏獒'
                  
                    
}

dog2=
                    
                      {
    'name':'simon'
                      
                        , 'gender':'母'
                        
                          , 'type':'吉娃娃'
                          
                             } person1=
                            
                              { 'name':'william'
                              
                                , 'gender':'母'
                                
                                  , 'type':'人'
                                  
                                     } def
                                    
                                       dog(name,gender,type): # 狗的动作 def
                                      
                                         jiao(dog): print('一条狗[%s], 汪汪汪' %dog['name'
                                        
                                          ]) def
                                          
                                             chi_shi(dog): print('一条狗[%s] 正在拉屎' %dog['type'
                                            
                                              ]) def
                                              
                                                 init(name,gender,type): dog1 =
                                                
                                                   { 'name'
                                                  
                                                    :name, 'gender'
                                                    
                                                      :gender, 'type'
                                                      
                                                        :type, 'jiao'
                                                        
                                                          :jiao, 'chi_shi'
                                                          
                                                            :chi_shi, } return
                                                            
                                                               dog1 return
                                                              
                                                                 init(name,gender,type) d1=dog('simon','母','吉娃娃'
                                                                
                                                                  ) d2=dog('william','母','藏獒'
                                                                  
                                                                    ) print
                                                                    
                                                                      (d1) print
                                                                      
                                                                        (d2) d1['jiao'
                                                                        
                                                                          ](d1) d2['chi_shi'](d2)
                                                                        
                                                                      
                                                                    
                                                                  
                                                                
                                                              
                                                            
                                                          
                                                        
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

输出结果:

            C:\Python35\python3.exe G:/python_s3/chapter24-面向对象/
            
              面向对象.py
{'jiao': 
              
                .jiao at 0x0000000000B3E0D0>, 'gender': '母', 'chi_shi': 
                
                  .chi_shi at 0x0000000000B3E1E0>, 'type': '吉娃娃', 'name': 'simon'
                  
                    }
{'jiao': 
                    
                      .jiao at 0x0000000000B3E2F0>, 'gender': '母', 'chi_shi': 
                      
                        .chi_shi at 0x0000000000B3E378>, 'type': '藏獒', 'name': 'william'
                        
                          }
一条狗[simon], 汪汪汪
一条狗[藏獒] 正在拉屎
                        
                      
                    
                  
                
              
            
          
            
              类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念;

对象:就是基于类而创建的一个具体的事物 (具体存在的),也是特征和动作整合到一起;
            
          

三、面向对象设计与面向对象编程

3.1 面向对象设计(Object oriented design):将一类具体事物的数据和动作整合到一起,即面向对象设计

面向对象设计(OOD)不会特别要求面向对象编程语言。事实上,OOD可以由纯结构化语言来实现(比如C)。但如果想要构造具备对象性质和特点的数据类型,就需要在程序上做更多的努力。

我们现在想用程序表述一台提款机,可以用面向过程,和面向对象两种方式设计。

3.2 面向对象编程(Object-oriented programming):用定义类+实例/对象的方式去实现面向对象的设计

            #用面向对象编程独有的语法class去实现面向对象设计
class
            
               Dog:
    def __init__
              
                (self,name,gender,type):
        self.name=
                
                  name
        self.gender=
                  
                    gender
        self.type=
                    
                      type

    def
                      
                         bark(self): print('一条名字为[%s]的[%s],狂吠不止' %
                        
                          (self.name,self.type)) def
                          
                             yao_ren(self): print('[%s]正在咬人' %
                            
                              (self.name)) def
                              
                                 chi_shi(self): print('[%s]正在吃屎' %
                                
                                  (self.type)) dog1=Dog('alex','female','京巴'
                                  
                                    ) print(dog1.__dict__
                                    
                                      ) # dog2=Dog('wupeiqi','female','腊肠') # dog3=Dog('yuanhao','female','藏獒') # # dog1.bark() # dog2.yao_ren() # dog3.chi_shi()
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

四、小结

一门面向对象的语言不一定会强制你写OO方面的程序。例如C++可以被认为"更好"的“C”;而JAVA,则是万物皆类,此外还规定,一个源文件对应一个类定义。

然而,在python中,类和OOP都不是日常编程所必需的。尽管它从一开始设计就是面向对象的,并且结构上支持OOP,但Python没有限定或要求你在你的应用中写OO的代码

 

用面向对象语言写程序,和一个程序的设计是面向对象的,两者是八竿子打不着的两码事。

纯C写的Linux Kernel事实上比C++/java 之类语言搞出来的大多数项目更加面向对象-----只是绝大部分人都自以为自己到处瞎写的class的苗条代码才是面向对象的正统、而死脑筋linus搞得泛文件抽象不过是过程是思维搞出来的老古董。

 

五、类和对象

1、什么叫类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例)。

2、什么叫对象:睁开眼,你看到的一切的事物都是一个个的对象,你可以把对象理解为一个具体的事物(事物即数据和动作的结合体)

(例如:铅笔是对象,人是对象,房子是对象,狗是对象)

3、类与对象的关系:对象都是由类产生的,上帝造人,上帝首先有一个造人的模板,这个模板即人的类,然后上帝根据类的定义来生产一个个的人。

4、什么叫实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例=对象)

 5.1 类相关知识

5.1.1 初识类

在python中声明函数与声明类相似

声明函数:

            1 def
            
               functionName(args):
2     '函数文档字符串'
3     函数体
            
          

声明类:

            '''
class 类名:
    '类的文档字符串'
     类体
'''

#我们创建一个类
class
            
               Data:
    pass
#用类Data实例化出一个对象d1
d1=Data()
            
          

5.1.2 属性

类是用来描述一类事物,类的对象指的是这一类事物中的一个个体

是事物就要有属性,属性分为:

1、数据属性:就是变量

2、函数属性:就是函数,在面向对象里通常称为方法

注意:类和对象均用点来访问自己的属性

5.1.3 类的属性

理论:数据属性即变量,类的定义与函数又极其类似,其实可以用函数的作用域来理解类的属性调用

查看类的属性:

我们定义的类的属性到此存到哪里了?有两种方式查看

dir(类名):查出的是一个名字列表

类名.__dict__:查出的是一个字典,key为属性名,value为属性值

            '''
1、数据属性
2、函数属性
'''
class Chinese: ##类名首字母大写
    '这是一个中国人的类'
            
              
    dang='民政党'
    def
              
                 sui_di_tu_tan():
        print('朝着墙上就是一口痰'
                
                  )
    def
                  
                     cha_dui(self):
        print('插到了前面'
                    
                      )

print
                      
                        (Chinese.dang) Chinese.sui_di_tu_tan() Chinese.cha_dui('zhurui'
                        
                          ) # print(dir(Chinese)) # print(Chinese.__dict__) ##查看类的属性字典 print(Chinese.__dict__['dang'
                          
                            ]) Chinese.__dict__['sui_di_tu_tan'
                            
                              ]() Chinese.__dict__['cha_dui'](1)
                            
                          
                        
                      
                    
                  
                
              
            
          

 

 5.2 对象相关知识

 对象是由类实例化而来,类实例化的结果称为一个实例或者称作一个对象

 5.2.4 查看实例属性

同样是dir和内置__dict__两种方式

 5.2.5 特殊实例属性

__class__

__dict__

            '''
1.数据属性
2.函数属性
'''
class
            
               Chinese:
    '这是一个中国人的类'
              
                

    dang='民政党'

    # def __init__(name,age,gender):
    #     dic={
    #         'name':name,
    #         'age':age,
    #         'gender':gender
    #     }
    #     return dic
    def __init__
                
                  (self,name,age,gender):
        # print('我是初始化函数,我开始运行了')
        self.mingzi=name  #p1.mingzi=name
        self.nianji=age   #p1.nianji=age
        self.xingbie=
                  
                    gender
        # print('我结束啦')

    def
                    
                       sui_di_tu_tan(self):
        print('%s 朝着墙上就是一口痰' %
                      
                        self.mingzi) def
                        
                           cha_dui(self): print
                          
                            (self) print('%s 插到了前面' %
                            
                              self.mingzi) def
                              
                                 eat_food(self,food): print('%s 正在吃%s' %
                                
                                  (self.mingzi,food)) p1=Chinese('元昊',18,'female') #--->__init__(self,name,age,gender) 
                                  
                                    p1.sui_di_tu_tan() p1.eat_food('屎'
                                    
                                      ) p2=Chinese('武sir',10000,'姑娘'
                                      
                                        ) p2.eat_food('韭菜馅饼'
                                        
                                          ) print
                                          
                                            (dir(p2)) # # # p1=Chinese.__init__(p1,name,age,gender) # # print(p1.__dict__) # # print(p1.__dict__['xingbie']) # print(p1.mingzi) # # print(p1.mingzi111111111111111) # # print(p1.dang) # # # print(Chinese.__dict__) # Chinese.sui_di_tu_tan() # Chinese.cha_dui(p1) # # # p1.sui_di_tu_tan() # # print('[------------------->') # p1.cha_dui()
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

警告:类和对象虽然调用__dict__返回的是一个字典结构,但是千万不要直接修改该字典,会导致你的opp不稳定

5.3 类属性与对象(实例)属性

类属性(增删改查):

            #类的属性
'''class ChinesePeople:
    country='China'
    def __init__(self,name):
        self.name=name

    def play_ball(self,ball):
        print('%s 正在打 %s' %(self.name))

def say_word(self,word):
    print('%s 说 %s' %(self.name,word))

#查看类属性
print(ChinesePeople.country)

#修改类属性
ChinesePeople.country='CHINA'
print(ChinesePeople.country)
#删除类属性
del ChinesePeople.country
#增加类属性
ChinesePeople.country='China'
ChinesePeople.location='Asia'
print(ChinesePeople.__dict__)
#类的数据属性增删改查与函数属性是一样的
ChinesePeople.say_word=say_word
print(ChinesePeople.__dict__)
'''

class
            
               Chinese:
    country='China'
    def __init__
              
                (self,name):
        self.name=
                
                  name

    def
                  
                     play_ball(self,ball):
        print('%s 正在打 %s' %
                    
                      (self.name))
#查看
print
                      
                        (Chinese.country) #修改 Chinese.country='Japan' print
                        
                          (Chinese.country) p1=Chinese('simon'
                          
                            ) print(p1.__dict__
                            
                              ) print
                              
                                (p1.country) #增加 Chinese.dang='民政党' # print(Chinese.dang) # print(p1.dang) #删除 del
                                
                                   Chinese.dang del
                                  
                                     Chinese.country print(Chinese.__dict__
                                    
                                      ) # print(Chinese.country) def
                                      
                                         eat_food(self,food): print('%s 正在吃%s' %
                                        
                                          (self.name,food)) Chinese.eat=
                                          
                                            eat_food print(Chinese.__dict__
                                            
                                              ) p1.eat('饭'
                                              
                                                ) def
                                                
                                                   test(self): print('test'
                                                  
                                                    ) Chinese.play_ball=
                                                    
                                                      test p1.play_ball()# Chinese.play_ball(p1)
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

 

实例属性(增删改查):

            class
            
               Chinese:
    country='China'
    def __init__
              
                (self,name):
        self.name=
                
                  name

    def
                  
                     play_ball(self,ball):
        print('%s 正在打 %s' %
                    
                      (self.name,ball))
p1=Chinese('simon'
                      
                        ) print(p1.__dict__
                        
                          ) #查看 # print(p1.name) # print(p1.play_ball) #增加 p1.age=18 print(p1.__dict__
                          
                            ) print
                            
                              (p1.age) #不要修改底层的属性字典 # p1.__dict__['sex']='male' # print(p1.__dict__) # print(p1.sex) #修改 p1.age=19 print(p1.__dict__
                              
                                ) print
                                
                                  (p1.age) #删除 del
                                  
                                     p1.age print(p1.__dict__)
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论