Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2441865
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: Python/Ruby

2013-05-07 15:18:08


self 参数


类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

创建一个类


  1. class Person:
  2.     pass # An empty block

  3. class Person:
  4.     #注意python的静态成员变量只能通过 类.变量名 的形式获取
  5.     static_var = 0

  6.     # 静态方法
  7.     @staticmethod
  8.     def static_fun():
  9.         print "this is a static function";    
  1.     def sayHi(self):
  2.         print 'Hello, how are you?'
  3.         print Person.static_var;

  4. p = Person()
  5. p.sayHi()

  6. Person.sayHi(p)

  7. Person().sayHi()

__init__方法


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

  1. #!/usr/bin/python
  2. # Filename: class_init.py

  3. class Person:
  4.     def __init__(self, name):
  5.         self.name = name
  6.     def sayHi(self):
  7.         print 'Hello, my name is', self.name

  8. p = Person('Swaroop')
  9. p.sayHi()

  10. # This short example can also be written as Person('Swaroop').sayHi()
就如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。
当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句。

继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制。继承完全可以理解成类之间的 类型和子类型 关系。

  1. class SchoolMember:
  2.     '''Represents any school member.'''
  3.     def __init__(self, name, age):
  4.         self.name = name
  5.         self.age = age
  6.         print '(Initialized SchoolMember: %s)' % self.name

  7.     def tell(self):
  8.         '''Tell my details.'''
  9.         print 'Name:"%s" Age:"%s"' % (self.name, self.age),

  10. class Teacher(SchoolMember):
  11.     '''Represents a teacher.'''
  12.     def __init__(self, name, age, salary):
  13.         SchoolMember.__init__(self, name, age)

  14. # 这里也可以用下面的方法调用父类的方法
  15. #   def __init__(self, blabla):
    #       super(Teacher, self).__init__(blabla)
  16.         self.salary = salary
  17.         print '(Initialized Teacher: %s)' % self.name

  18.     def tell(self):
  19.         SchoolMember.tell(self)
  20.         print 'Salary: "%d"' % self.salary

  21. t = Teacher('Mrs. Shrividya', 40, 30000)
  22. t.tell()

特殊的方法


在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法。

一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,Python就是对list类这样做的!
下面这个表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python参考手册》中找到一个庞大的列表。
名称 说明
__init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self) 恰好在对象要被删除之前调用。
__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other) 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的时候调用。
__len__(self) 对序列对象使用内建的len()函数的时候调用。


阅读(1939) | 评论(0) | 转发(0) |
0

上一篇:Python 调试

下一篇:Python 发送邮件 smtplib

给主人留下些什么吧!~~