zoukankan      html  css  js  c++  java
  • 简明python教程七----面向对象的编程

    根据操作数据的函数或语句块来设计程序的,被称为面向过程的编程。

    把数据和功能结合起来,用称为对象的东西包裹起来的组织程序的方法,称为面向对象的编程理念。

    类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类的实例

    属于一个对象或类的变量被称为

    对象可以使用属于类的函数来具有功能,这样的函数被称为类的方法。

    域和方法可以合称为类的属性。

    有两种类型--属于每个实例/类的对象或属于类本身。分别被称为实例变量和类变量。

    类使用class关键字创建。类的域和方法被列在一个缩进块中。

    self

    的方法与普通的函数只有一个特别的区别:它们有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它名称是self。

    创建一个类

    class Person:
        pass
    
    p = Person()
    print p

    输出:

    <__main__.Person instance at 0xf6fcb18c>

    class语句后跟类名,创建了一个新的类。后面跟着一个缩进的语句块形成类体。

    后面类名后跟一对圆括号来创建一个对象/实例。

    对象的方法

    类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。

    class Person:
        def sayHi(self):
            print 'Hello,how are you?'
    
    p = Person()
    p.sayHi()

    注意sayHi方法没有任何参数,但仍然在函数定义时有self

    __init__方法

    __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化。注意,这个名称的开始和结尾都是双下划线。

    class Person:
        def __init__(self,name):
            self.name = name
        def sayHi(self):
            print 'Hello,my name is',self.name
    
    p = Person('Swaroop')
    p.sayHi()

    结果:

    Hello,my name is Swaroop

    有两种类型的域:类的变量对象的变量

    类的变量由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。

    对象的变量由类的每个对象/实例拥有。每个对象有自己对这个域的一份拷贝,即他们不是共享的。

    #!/usr/bin/python
    #Filename:objvar.py
    
    class Person:
        '''Represents a person.'''
        population=0
    
        def __init__(self,name):
            '''Initializes the person's data.'''
            self.name = name
            print '(Initializing %s)'%self.name
    
            #when this person is created,he/she
            #adds to the population
            Person.population+=1
    
        def __del__(self):
            '''I am dying.'''
            print '%s says bye.' %self.name
    
            Person.population -= 1
    
            if Person.population == 0:
                print'I am the last one.'
            else:
                print 'There are still %d people left.'%Person.population
    
        def sayHi(self):
            '''Greeting by the person.
    
             Really,that's all it does.'''
            print 'Hi,my name is %s.'%self.name
    
        def howMany(self):
            '''Prints the current population.'''
            if Person.population == 1:
                print 'I am the only person here.'
            else:
                print'We have %d persons here.'% Person.population
    
    swaroop = Person('Swaroop')
    swaroop.sayHi()
    swaroop.howMany()
    
    kalam = Person('Abdul Kalam')
    kalam.sayHi()
    kalam.howMany()
    
    swaroop.sayHi()
    swaroop.howMany()

    结果:

    (Initializing Swaroop)
    Hi,my name is Swaroop.
    I am the only person here.
    (Initializing Abdul Kalam)
    Hi,my name is Abdul Kalam.
    We have 2 persons here.
    Hi,my name is Swaroop.
    We have 2 persons here.

    说明:population属于Person类,因此是一个类的变量。name变量属于对象(它使用self赋值)因此是对象的变量。

    记住:

    Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。

    例外:你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。

    这是一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。

  • 相关阅读:
    Oracle sql的基本优化写法和思路。
    Linux的简单介绍和开发基本运维时候用到的命令
    Nginx的使用(反向代理,负载均衡)
    Mybatis传值为空需要配置JdbcType来解决吗?(XML文件不需要配置JdbcType)
    Mybatis Blob和String互转,实现文件上传等。
    Ckeditor上传图片返回的JS直接显示出来,未执行!!!
    学习中的错误——ubuntu 14.04 LTS 启动eclipse报错
    2016计算机大会后记——机器学习:发展与未来
    2016计算机大会后记——大数据时代的模式识别
    近期编程问题——epoll failed:bad file descriptor
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/6391553.html
Copyright © 2011-2022 走看看