面向过程

函数式编程
面向对象编程:面向对象是由类和对象组成,只要用类和对象实现的,就是面向对象编程
def  Bar():
    print  "This is  Bar "
def Hello(name):

    print  "Iam is %s "  % name
class Foo():
    print  "Iam is  %s " % name

python面向的对象种类:继承,封装,多态
python语言中的多态表现并不是很突出,主要是继承和封装

方式一:
    def  fetch():
            #连接数据库,hostname,port,password,db
            #打开数据库
            #操作数据库
            #关闭数据库
    def  modify():
            #连接数据库,hostname,port,password,db
            #打开数据库
            #操作数据库
            #关闭数据库
    def  remove():
            #连接数据库,hostname,port,password,db
            #打开数据库
            #操作数据库
            #关闭数据库
    def create():
            #连接数据库,hostname,port,password,db
            #打开数据库
            #操作数据库
            #关闭数据库
函数调用执行: (看起来比较复杂)
create(hostname,port,passpord,db)
remove(hostname,port,passpord,db)
modify(hostname,port,passpord,db)
fetch(hostname,port,passpord,db)

面向对象: 
class Foo():
    def    __init__(self,hostname,port,password,db):
          self.hostname = hostname 
          self.port = port 
          self.passpord = password
          self.db = db 
        
def fetch(self):

self.hostname

self.port

self.passpord

self.db

def modify(self):
      pass
def create(self):
      pas
def remove(self): 
      pass

obj = Foo(127.0.0.1,3306,123456,testdb)
obj.fetch()                                                                  #这里就不需要传入参数了,直接调用即可

先把类读入到内存中,在内存里面就有了很多方法 (包括init,modify,fetch,remove,create)
如果创建对象内存里就只有这些东西,创建一个obj = Foo()对象,相当于把obj赋值给了self,self就等同于obj
此时hostname=127.0.0.1 port=3306 passpord=123456 db=testdb 保存在self里面,在self内存中存放
类对象指针,指针指向了类,相当于做了一个关联,obj是根据类Foo创建的,每个对象都有一个创建它的类
obj通过指针找到了类,从而在类中找到类中的方法,进行执行和调用 

对象是由类来创建的,对象只封装字段 
对象执行的时候,如果用到变量就需要去对象封装的变量中去找


对象的创建如何用? 

根据一个模板来动态得创建一个东西 
如果多个方法,方法共用一个变量,通过构造函数,封装起来,对象里执行的时候,通过构造函数来执行

类的种类
新式类和经典类
新式类: 只要在定义类的时候class  Foo(object) 有这个object就代表是新式类  
类的继承
父类的功能,子类都可以继承
class linux():
    def kernel(self):
          print "my kernel is 4.0"
class ubuntu(linux):             #继承的父类
    def xubunu(self):
          print “Iam si xubuntu”

os = ubuntu() 
os.kernel
#不管是直接的还是间接地继承,父类的功能都是可以使用的
现在的通常叫法:
父类也叫:基类
子类也叫:派生类

类的多继承
新式类遵循广度优先
经典类遵循深度优先
   
多继承的深度优先和广度优先 如图: 
class D():
    def bar(self):
        print "D"
class B(D):
    pass
class C(D):
    pass
class A(B,C)     


类和对象分别都有什么?
类里面有方法
对象里面有字段 
classs Person():
        def __init__(self,name,age):
                self.name = name
                self.age = age
        def  func(self):
                return "ok"
在一个类中有三种类成员               字段 方法 属性 
字段 : 
普通字段
class  os(object):
       def __init__(self,name):
            self.name = name                  #普通字段
不同的对象调用相同的方法时,方法中引用普通字段 

静态字段:
class  os(object)
       kernel = "linux"                            #静态字段
       def __init__(self,name):
            self.name = name
centos = os(‘centos’)
centos.kernel                                      # 
print os.kernel                                     #建议用这个形式
不同的对象调用相同的字段
所有对象都可以访问静态字段,可以看作为是每个对象具有共同的属性


方法:
普通方法
对象执行一个方法的时候, 自动把自己当做一个参数,赋值给self,参数至少要一个self

静态方法
可以直接传入一个参数,相当于函数的动态传参

类方法
同理,类会自动把自己当做一个参数,赋值给方法的cls 
如果向执行一个方法,可以直接调用,不需要在创建对象,然后用对象调用方法,而是可以直接通过类来调用
class os():
    def f1(self):                                         #普通方法
            pass
    @staticmethod                                  #静态方法 
    def f2(cls):
            print  cls
    @classmethod                                   #类方法
    def f3(arg):
            pass


属性:
python中的属性用的非常少
不管是新式类和经典类都可以加载property
属性在定义的时候,仅有一个self 参数,在方法上加上@property,执行的时候不需要加上() ---> obj.func2 如下:
classs Person():
         def __init__(self,name,age):
                self.name = name
                self.age = age
         def  func(self):
                return "ok"
@property 
def func2(self):
    return("Iam is ok ")

obj = Person("budongshu","18")
obj.func()                            #普通方法执行方式
obj.func2                             #属性执行方式
属性的好处: 
为了伪造成一个属性,也可以说是伪造成一个字段,一个假象,让你知道它是一个属性,访问执行的时候不需要加上括号
属性的另外一种定义形式:
def func2(self):
    return("Iam is ok ")
bar = property(func2)

只有新式类生效的属性方法:
@property.setter
def func2(self):
    return("Iam is ok ")
执行同上个例子:obj.func2  = "not ok"
@property.deleter
def func2(self):
    return("Iam is ok ") 
执行通上个例子:del obj.func2 

成员修饰符   公有和私有
其他语言比python的功能要多,私有和共有都有受保护的功能
公有
class  os(object):
    kernel = "linux"                       #正常来说,平时定义的代码,都是公有的
    def start():
           print os.__kernel             
os.kernel                                       #成功调用
    


私有
直接访问是访问不到私有字段的,但可以通过类的内部方法和属性都可以间接地访问到
私有字段
class  os(object):
    __kernel = "linux"                     #前面加俩个下划线就变成了私有
    def start():
           print os.__kernel             
os.kernel                                       #这时候调用的时候,就会报错
centos = os()
centos.start()                        

def __init__(self):
    _self__name = name                #私有字段只有内部访问 

私有方法
def  __start(self):
    pass

@staicmethod
def __start(self):
    pass

思考:类的继承可以访问私有的吗?
答: 是不可以的,子类也是访问不了的
class windows(os):
    def  show(self):
        print os.__kernel 

特殊情况 : 不推荐使用,但也可以使用
centos._os__kernel
centos._os__name
centos._os__start()




    










    

python 面向对象深入理解的更多相关文章

  1. python 面向对象简单理解

    面向对象: 是一种程序设计范型 作用: 提高软件的重用性和灵活性,扩展性 世界万物一切皆为对象,对象即是指由特定状态,特征,行为的实体   知识点一: 代码的重用 举个栗子 比如小月月有了一个女朋友1 ...

  2. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  3. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  4. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  5. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  6. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  7. Python 面向对象之一

    Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...

  8. Python面向对象篇之元类,附Django Model核心原理

    关于元类,我写过一篇,如果你只是了解元类,看下面这一篇就足够了. Python面向对象之类的方法和属性 本篇是深度解剖,如果你觉得元类用不到,呵呵,那是因为你不了解Django. 在Python中有一 ...

  9. #5 Python面向对象(四)

    前言 本节将是Python面向对象的最后一篇博文了,这节将记录类的特殊方法.特殊成员方法.旧类和新类的不同,以及一些其他知识.Go! 一.类的特殊方法 Python有三种特殊方法:实例方法.静态方法. ...

随机推荐

  1. 【 HDU 1255】 覆盖的面积(矩阵面积交,线段树,扫描法)

    [题目] 覆盖的面积 Problem Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100 ...

  2. ANDROID_MARS学习笔记_S03_005_Geocoder、AsyncTask

    一.代码1.xml(1)AndroidManifest.xml <uses-permission android:name="android.permission.ACCESS_FIN ...

  3. PCB 敷铜间距规则(转)

    第一优先规则: First Object = InPolygon, Second Object = All 第二优先规则:First Object = All, Second Object = All ...

  4. HTML input标签的checked属性与Razor解析

    在HTML中,input标签可以通过type属性设置为checkbox.同时,也就包含了一个checked属性.对于这个checked属性,有一个特别的地方就是,它可以不需要属性值就可以表示是否选择了 ...

  5. 自定义滚轮效果选择器spinnerwheel的使用总结

    项目中有使用到像IOS滚轮效果的选择时间或数字的组件:android-spinnerwheel github地址:https://github.com/ai212983/android-spinner ...

  6. Android JNI使用方法

    经过几天的努力终于搞定了android JNI部分,下面将我的这个小程序和大家分享一下.android JNI是连接android Java部分和C/C++部分的纽带,完整使用JNI需要Java代码和 ...

  7. perl 监控数据库用到的数据结构

    [root@yun1 test]# cat a1.pl my $h={'192.168.11.187'=>['root','1234567'], '192.168.5.7' =>['roo ...

  8. Oracle core06_latch&lock

    lock and latch 在oracle中为了保护共享资源,使用了两种不同的锁机制lock和latch,这两种锁有明显不同点: 1,lock和pin,采用的是队列的方式,先来先服务的策略,latc ...

  9. JavaScript元素的创建、添加、删除

    <script> var x=document.getElementById("p2"); var obj=document.createElement("p ...

  10. 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

      请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...