Python 类的一些基本概念
Python中一切皆对象,声明变量函数等的过程实际上就是它们到内存中为对象分配的空间的连接。Python中的类同Java、C++一样,有自己的属性与方法。属于一个对象或类的变量被称为域。 域有两种类型——属于每个实例/类的对象或属于类本身,它们分别被称为实例变量和类变量。 类的变量 由一个类的所有对象(实例)共享使用。所有对象共用一个类变量的拷贝。对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝。
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称self,但是在调用这个方法的时候你不为这个参数赋值,Python 会提供这个值。self相当于Java中的this,表示是这个对象本身。如果你有一个不需要参数的方法,你还是得给这个方法定义一个self 参数。
类中的__init__方法在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。它会在类的一个对象创建时马上运行。__init__方法类似于 C++、C#和 Java 中的构造函数,可以用来对属性赋值。如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象
不再被使用,它所占用的内存将返回给系统作它用。__del__方法与 destructor 的概念类似。
以下是python类的继承
#!/usr/bin/python
# Filename: inherit.py
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)
self.salary = salary
print '(Initialized Teacher: %s)' % self.name
def tell(self):
SchoolMember.tell(self)
print 'Salary: "%d"' % self.salary
class Student(SchoolMember):
'''Represents a student.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print '(Initialized Student: %s)' % self.name
def tell(self):
SchoolMember.tell(self)
print 'Marks: "%d"' % self.marks
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)
print # prints a blank line
members = [t, s]
for member in members:
member.tell() # works for both Teachers and Students
Python 不会自动调用基本类的 constructor,你得亲自专门调用它。子类要显示的调用父类的构造函数即__init__方法。与Java一样,Python也是运行时绑定,按照对象的实际类型决定调用的方法,不是C++的静态绑定。
运行结果如下: