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: 易做图stclass.py
class Person:
pass # An empty block
p = Person()
print p
#!/usr/bin/python
# Filename: 易做图stclass.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 ,