Python

Python 知识量:10 - 41 - 150

10.1 创建对象><

类定义- 10.1.1 -

对于大型程序来说,面向对象编程(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。

创建对象- 10.1.2 -

类中的函数__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)方法- 10.1.3 -

__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)方法- 10.1.4 -

__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)。