Python+Django+SAE系列教程3-----Python中的面向对象编程
来源:互联网 发布:投资书籍推荐知乎 编辑:程序博客网 时间:2024/05/29 03:07
第十一章的《简明 Python 教程》介绍了面向对象的一些思想,首先我们来看看在Python中是如何定义类的:
#!/usr/bin/python# Filename: method.pyclass Person: def sayHi(self): print 'Hello, how are you?'p = Person()p.sayHi()
在面向对象中我们知道一个类都有它的构造函数,C#中这个函数的名字都会和类名保持一致,而在Python中则都用__init__方法:
class Person: def __init__(self, name): self.name = name def sayHi(self): print 'Hello, my name is', self.namep = Person('Swaroop')p.sayHi()
#!/usr/bin/python# Filename: objvar.pyclass 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 __del__(self): '''I am dying.''' print '%s says bye.' % self.name Person.population -= 1 if Person.population == 0: print 'I am the last one.' else: print 'There are still %d people left.' % Person.population def sayHi(self): '''Greeting by the person. Really, that's all it does.''' print 'Hi, my name is %s.' % self.name def howMany(self): '''Prints the current population.''' if Person.population == 1: print 'I am the only person here.' else: print 'We have %d persons here.' % Person.populationswaroop = Person('Swaroop')swaroop.sayHi()swaroop.howMany()kalam = Person('Abdul Kalam')kalam.sayHi()kalam.howMany()swaroop.sayHi()swaroop.howMany()
就如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。在这个方法里面,我们只是简单地把Person.population减1。
当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句,就如同我们在以前的例子中使用的那样。
一下是输出结果:
Hi, my name is Swaroop.I am the only person here.Hi, my name is Abdul Kalam.We have 2 persons here.Hi, my name is Swaroop.We have 2 persons here.Abdul Kalam says bye.There are still 1 people left.Swaroop says bye.I am the last one.
后面的行不一定什么时候会执行,所以我们在测试的时候一般看不到这四句话。
然后我们来看看Python的继承:
#!/usr/bin/python# Filename: inherit.pyclass 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.salaryclass 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.markst = Teacher('Mrs. Shrividya', 40, 30000)s = Student('Swaroop', 22, 75)print # prints a blank linemembers = [t, s]for member in members: member.tell() # works for both Teachers and Students
我想聪明的你比照着一下输出结果,一定能理解Python中类继承的含义:
$ python inherit.py(Initialized SchoolMember: Mrs. Shrividya)(Initialized Teacher: Mrs. Shrividya)(Initialized SchoolMember: Swaroop)(Initialized Student: Swaroop)Name:"Mrs. Shrividya" Age:"40" Salary: "30000"Name:"Swaroop" Age:"22" Marks: "75"
我们还观察到我们在方法调用之前加上类名称前缀,然后把self变量及其他参数传递给它。
注意,在我们使用SchoolMember类的tell方法的时候,我们把Teacher和Student的实例仅仅作为SchoolMember的实例。
另外,在这个例子中,我们调用了子类型的tell方法,而不是SchoolMember类的tell方法。可以这样来理解,Python总是首先查找对应类型的方法,在这个例子中就是如此。如果它不能在导出类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的。
99 0
- Python+Django+SAE系列教程3-----Python中的面向对象编程
- Python+Django+SAE系列教程6-----本地配置Django
- Python+Django+SAE系列教程8-----Django基础
- Python+Django+SAE系列教程10-----Django的模板
- python+django+sae(3)
- Python+Django+SAE系列教程4-----操作文件
- Python+Django+SAE系列教程5-----使用存储器cpickle
- Python+Django+SAE系列教程11-----request/pose/get/表单
- Python+Django+SAE系列教程12-----配置MySQL数据库
- Python+Django+SAE系列教程14-----使表单更安全
- Python+Django+SAE系列教程16-----cookie&session
- Python+Django+SAE系列教程7-----在Sae上配置Django
- Python+Django+SAE系列教程9-----Django的视图和URL
- Python+Django+SAE系列教程1-----Python环境和基本语法
- Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构
- Python+Django+SAE系列教程1-----Python环境和基本语法
- Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构
- sae django+python部署
- XML DOM---解析xml dom
- 集合遍历
- 高效的SQLSERVER分页查询(推荐)
- 循环语句中的if else 结构里面如何使用break语句?
- android ViewHolder 使用
- Python+Django+SAE系列教程3-----Python中的面向对象编程
- ubuntu下kermit的安装和配置
- codeforces problem/244/A
- 华为机试——字符串过滤&字符串压缩
- 模型验证组件 FluentValidation
- 如何在百度云平台上执行Hadoop MapReduce程序
- php 中的换行
- 理解cookie的path和domain属性
- IOS发布真机报错之头文件预编译被修改