Python 知识量:10 - 41 - 150
对于大型程序来说,面向对象编程(OOP)的开发效率更高,软件的可维护性更好。Python同样支持面向对象编程,而且在Python中,一切皆对象!
面向对象编程首要的一个概念就是类。类用于定义一组对象,描述了某一类事物的特征。下面是一个定义类的示例:
# person.py class Person: def __init__(self): self.name='' self.age=0
以上代码定义了一个名为Person的类,它包含两个属性,即name和age,还包含一个函数__init__(self)。该函数因为位于类中,因此也被称为方法。
对于参数self需要注意的是:
类方法的第一个参数永远是self,表示创建的类实例本身(即对象),而不是类本身。
与self功能相似的是,在Java语言中,使用this来完成该任务。
self不是Python的关键字,可以用其他名称命名,但是其含义不会变。
调用类方法时,不必对self参数传入相应的值。
self只有在类方法中才是必须的,其他函数或方法不必使用self。
类中的函数__init__(self)常被称为构造函数,用于创建(初始化)对象。Python中创建对象比Java或C++语言都要简单。下面利用Person类创建一个对象p:
>>> ===================== RESTART: D:/PythonTestFile/person.py ===================== >>> p=Person() >>> p <__main__.Person object at 0x00000145D7B77E80> >>> p.name '' >>> p.age 0
使用Person()就可以创建对象了。这时程序会自动调用类方法__init__(self),这个方法只会在创建对象是调用一次。可以通过句点表示法查看对象属性name和age的值,也可以使用该方法设置属性的新值,比如:
>>> p.name='Jeff' >>> p.age=37 >>> p.name 'Jeff' >>> p.age 37
__str__(self)方法用于生成对象的字符串表示,即描述该对象是什么。当使用“str(object)”语句时会自动调用该方法,例如:
# person.py class Person: def __init__(self): self.name='' self.age=0 def __str__(self): return "This is person('%s',%s)." % (self.name,self.age)
运行结果为:
>>> ===================== RESTART: D:/PythonTestFile/person.py ===================== >>> p=Person() >>> str(p) "This is person('',0)."
__repr__(self)方法用于返回对象的官方表示。当直接引用对象名称时(shell中输入对象名称并回车),会自动调用该方法,例如对于未定义__repr__(self)方法的Person类对象调用官方表示是这样的效果:
>>> ===================== RESTART: D:/PythonTestFile/person.py ===================== >>> p=Person() >>> p <__main__.Person object at 0x00000202C2A8B6A0>
下面添加__repr__(self)方法:
# person.py class Person: def __init__(self): self.name='' self.age=0 def __str__(self): return "This is person('%s',%s)." % (self.name,self.age) def __repr__(self): return str(self)+"( from __repr__(self))"
调用的后的效果为:
>>> ===================== RESTART: D:/PythonTestFile/person.py ===================== >>> p=Person() >>> p This is person('',0).( from __repr__(self))
如果类方法中定义了__repr__(self),而没有定义__str__(self),调用str(object)时,系统将执行__repr__(self)。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6