面向对象编程是一种最有效的软件编写方式。 在面向对象编程中, 我们可以编写表示现实世界中的事物和情景的类, 并基于这些类来创建对象。 编写类时, 我们可以定义一种事物类都具有的通用行为。 基于这个类创建对象时, 每个对象都会自动具备这种行为, 然后根据需要赋予其中每个对象独特的个性。 这样就可以模拟出现实世界的场景。
假设,我们需要创建一个 User 类,用于定义账号信息。
class User():
'''账号信息'''
def __init__(self, name, pwd):
'''初始化'''
self.name = name
self.pwd = pwd
def valid(self):
'''是否验证通过'''
print(self.name + ' 验证通过')
- 在 Python 中, 约定类的名称首字母大写 。因为这是一个基本类,所以类定义中的括号是空的 。
- 在冒号之后,定义了一个文档字符串, 用于描述这个类的功能。
1 初始化方法 __init__()
当我们根据某个类来创建实例时,就会调用该方法 __init__()
。 在这个方法的名称中, 开头和末尾各有两个下划线, 这是 Python 的约定, 这样可以避免与 Python 的默认方法或普通方法发生名称冲突 。
这里的方法 __init__()
包含三个形参: self 、 name 和 pwd。注意: 必须要有形参 self, 而且必须位于其他形参的之前。 创建类实例时, 就会动传入实参 self 。 调用每个与类相关联的方法,都会自动传递实参 self , 它是一个指向实例本身的引用, 通过它,可以让实例能够访问类中的属性和方法。
这里,我们在方法 __init__()
中,定义了两个变量,姓名与密码。以 self 为前缀的变量都可以供类中的所有方法调用, 我们还可以通过类的任何实例来访问这些变量。 这些变量称为类的属性。
2 创建实例
现在,让我们创建一个账号实例。
class User():
...
# 创建实例
deniro_user = User('Deniro', '1')
print('账号名:' + deniro_user.name)
print('密码:' + deniro_user.pwd)
运行结果:
账号名:Deniro
密码:1
可以使用句点表示法来访问实例的属性。
注意: 类与实例命名约定: 首字母大写的名称( 如 User ) 指的是类, 而
小写的名称( 如 deniro_user ) 指的是依据类创建的实例。
3 调用方法
也可以使用句点表示法,来调用类定义的任何方法。
class User():
...
# 创建实例
deniro_user = User('Deniro', '1')
# 调用实例方法
deniro_user.valid()
运行结果:
Deniro 验证通过
建议为属性和方法取一个合适的描述性名称,这样有助于维护和理解这些代码。
4 创建多个实例
lass User():
...
# 创建实例
deniro_user = User('Deniro', '1')
print('账号名:' + deniro_user.name) # 访问实例属性
print('密码:' + deniro_user.pwd)
lily_user = User('Lily', '2')
print('账号名:' + lily_user.name) # 访问实例属性
print('密码:' + lily_user.pwd)
# 调用实例方法
deniro_user.valid()
lily_user.valid()
运行结果:
账号名:Deniro
密码:1
账号名:Lily
密码:2
Deniro 验证通过
Lily 验证通过
创建的每一个实例,都是独立的, 都拥有自己的一组属性,而且能够执行相同的方法。
我们可以根据需求,为一个类创建任意数量的实例。