self 参数
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。
创建一个类
-
class Person:
-
pass # An empty block
-
-
class Person:
-
#注意python的静态成员变量只能通过 类.变量名 的形式获取
-
static_var = 0
-
-
# 静态方法
-
@staticmethod
-
def static_fun():
-
print "this is a static function";
-
def sayHi(self):
-
print 'Hello, how are you?'
-
print Person.static_var;
-
-
p = Person()
-
p.sayHi()
-
-
Person.sayHi(p)
-
-
Person().sayHi()
__init__方法
在Python的类中有很多方法的名字有特殊的重要意义。
__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。
-
#!/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()
就如同__init__方法一样,还有一个特殊的方法
__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。
当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句。
继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制。继承完全可以理解成类之间的 类型和子类型 关系。
-
class SchoolMember:
-
'''Represents any school member.'''
-
def __init__(self, name, age):
-
self.name = name
-
self.age = age
-
print '(Initialized SchoolMember: %s)' % self.name
-
-
def tell(self):
-
'''Tell my details.'''
-
print 'Name:"%s" Age:"%s"' % (self.name, self.age),
-
-
class Teacher(SchoolMember):
-
'''Represents a teacher.'''
-
def __init__(self, name, age, salary):
-
SchoolMember.__init__(self, name, age)
-
-
# 这里也可以用下面的方法调用父类的方法
-
# def __init__(self, blabla):
# super(Teacher, self).__init__(blabla)
-
self.salary = salary
-
print '(Initialized Teacher: %s)' % self.name
-
-
def tell(self):
-
SchoolMember.tell(self)
-
print 'Salary: "%d"' % self.salary
-
-
t = Teacher('Mrs. Shrividya', 40, 30000)
-
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()函数的时候调用。
|
阅读(1957) | 评论(0) | 转发(0) |