当前位置:编程学习 > 网站相关 >>

python学习备忘录--2

上一篇:http://www.zzzyk.com/kf/201202/118740.html

1,前言
   前面的备忘录提到了python的基本教程,基本上本文例子都是沈洁元的简明教程里面的内容,这两篇都是读书笔记,算不上派生,主要也是自己备忘用的,译者见谅。
   基本上本文的解释是自己的理解,没有采用书本中的讲解,觉得自己解释可能更容易记住。

   上篇备忘主要是面向过程来讲述的,其实python是凡事都是对象的一种解释语言。包括类型int啊等等都是对象,与C/C++显然不同,在这两个语言中,类型是作为原子来定义的,主要是用来分配内存字节而用,没有所谓方法,当然这点在VC中做了一定改变,比如对字符串的处理显然是比C要方便一些。

    python和perl,还是Python容易懂些,效率差了

2,面向对象的python
   2.1,类创建一个新类型,而对象这个类的 实例。
   2.2,对象可以使用普通的 属于 对象的变量存储数据。属于一个对象或类的变量被称为域。对象也可以使用 属于 类的函数来具有功能。这样的函数被称为类的方法。域和方法可以合称为类的属性。
   2.3,域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变量。类使用class关键字创建。类的域和方法被列在一个缩进块中。

3,类

   3.1,self参数

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

            self 本身不需要赋值,由python自动完成功能,如果你的实例调用一个方法,例如:假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)
  3.2,创建一个类
    我们看下面这个例子:
[python]
#!/usr/bin/python  
 # Filename: simplestclass.py  
 
 class Person: 
         pass # An empty block  
 
 p = Person() 
 print p 
      #!/usr/bin/python
       # Filename: simplestclass.py

       class Person:
               pass # An empty block

       p = Person()
       print p      如果你去掉pass前面的缩进,会提示错误,期待一个缩进,一定要记住python是由缩进来区别语句块的,习惯C的人要留心。
      结果打印的是这个实例的内存地址。

       再者要注意的是:python中表示空语句必须写个pass,而不是像C中括号一括完事,因为python是用缩进来区别语句块的。所以你不缩进,解释器就不懂了。
  3.3,对象的方法
      对象方法与函数类似,只不过多了一个额外的self变量。
      我们来看一个方法:
[python]
  #!/usr/bin/python  
  # Filename: method.py  
 class Person: 
         def sayHi(self): 
            print 'Hello, how are you?' 
p = Person() 
p.sayHi() 
      #!/usr/bin/python
      # Filename: method.py
     class Person:
             def sayHi(self):
                print 'Hello, how are you?'
    p = Person()
    p.sayHi()    # This short example can also be written as Person().sayHi()
   要注意sayHi方法没有任何参数。我个人觉得之所以需要一个self做方法默认参数可能是由于python是门解释型语言,便于解释器解释。刚学这只是种感觉,不对之处请指正。

   3.4,一些特殊方法
        这里面其实涉及了一些并不陌生的概念
   3.4.1 __init__方法
        这个方法其实就是构造函数啊,大家懂了吧,而且上篇没有提到,python是变量不需要事前声明的,说实话看到下面这个例子,还是多少有点不适应
[python]
#!/usr/bin/python  
           # Filename: class_init.py  
           class Person: 
               def __init__(self, name): 
                      self.name = name 
          def sayHi(self): 
          print 'Hello, my name is', self.name 
          p = Person('Swaroop') 
          p.sayHi() 
          # This short example can also be written as Person('Swaroop').sayHi() 
 #!/usr/bin/python
            # Filename: class_init.py
            class Person:
                def __init__(self, name):
                       self.name = name
           def sayHi(self):
           print 'Hello, my name is', self.name
           p = Person('Swaroop')
           p.sayHi()
           # This short example can also be written as Person('Swaroop').sayHi()这里面的属性域没有声明啊,也不说什么类型,在语法严格C++中显的是相当糟糕。

创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。

这个你要是习惯C++/Java之类的强制类型申明语言,看到这个self.name很不适应。还是把self参数当成系统需要的参数就好了。


下面这个例子可以解释一下为什么实例的属性域可以不用声明,对于python而已,创建实例适合,调用的__init__方法
[python]
#!/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 __de

补充:Web开发 , Python ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,