首页 > 代码库 > class随笔(三)

class随笔(三)

编写并改进类

目标:编写两个类,Person--(创建并处理关于人员信息的一个类)和Manage--(一个定制的Person,修改了继承的行为)

步骤1:创建实例,模块使用小写字母开头,类名使用大写字母开头。

# Add record field initialization
class Person:
    def __init__(self, name, job, pay):    # 构造函数拥有三个参数
        self.name = name    # 创建构造函数时填入各个参数
        self.job = job    # self是新的实际对象
        self.pay = pay

有关Person类的第一件事情就是记录关于人员的基本信息,在python中,这叫做实例对象属性(name, job, pay),通常通过给类方法函数中的self属性赋值来创建。

赋给实例属性第一个值的通常方法是在__init__构造函数方法中将它们赋给self,构造函数方法包含了每次创建一个实例的时候python自动运行的代码。

self为新创建的实例对象,而name, job, pay变成了状态信息,即保存在对象中供随后使用的描述性数据。

虽然此处,参数名出现了两次(self.name = name),但实际上,name参数在__init__中是一个本地变量,但self.name是实例的一个属性,它暗示了方法调用的内容。通过self.name = name把本地的name赋给了self.name属性。

当产生一个实例的时候,会自动调用__init__构造函数,并且此函数会有特殊的第一个参数self。可以为它的参数提供默认值。(根据python语法规则,一个函数定义中,在第一个拥有默认值的参数之后的任何参数,都必须拥有默认值)

# Add defaults for constructor arguments
class Person:
    def __init__(self, name, job=None, pay=0):
        self.name = name
        self.job = job
        self.pay = pay

 

在添加更多功能之前,先来测试目前的代码:生成类的几个实例,并且显示构造函数所创建的它们的属性。

# Add incremental self-test code
class Person:
    def __init__(self, name, job=None, pay=0):
        self.name = name
        self.job = job
        self.pay = pay

bob = Person(Bob Smith)
sue = Person(Sue Jones, job=dev, pay=10000)    # 自动运行__init__函数
print(bob.name, bob.pay)    # 获取相关的属性
print(sue.name, sue.pay)

上述代码会打印:
Bob Smith 0
Sue Jones 10000

此处的bob对象针对job和pay接受了默认值,但sue显式地提供了值。类的每一个实例都有自己的一组self属性,类充当对象工厂。

 

class随笔(三)