8.1 类、对象与封装
面向对象编程(object-oriented programming, OOP)把程序中的事物建模成对象(object)。对象既保存数据,也提供行为。类(class)是对象的模板,对象是类的实例(instance)。
类与对象
下面的 BankAccount 类表示银行账户。owner、account、balance 是属性(attribute),deposit() 和 withdraw() 是方法(method)。
python
class BankAccount:
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount):
self.balance -= amount
account = BankAccount()
account.owner = "Alice"
account.account = "6250941006528599"
account.balance = 50
account.deposit(100)
print("余额:", account.balance)运行结果:
text
余额:150这里的 self 表示当前对象。调用 account.deposit(100) 时,self 就是 account。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...
封装
封装(encapsulation)是指隐藏对象内部实现,让外部通过明确的方法访问和修改对象状态。
如果账户余额可以被外部随便改,程序就很难保证数据正确。因此,更好的做法是让余额成为私有属性,并通过方法进行检查。
正在加载交互实验...
python
class BankAccount:
def __init__(self, owner, account, balance):
self.__owner = owner
self.__account = account
self.__balance = balance
def get_balance(self):
return self.__balance
def deposit(self, amount):
if amount <= 0:
return False
self.__balance += amount
return True
def withdraw(self, amount):
if amount <= 0 or amount > self.__balance:
return False
self.__balance -= amount
return True私有属性(private attribute)并不是为了“神秘化代码”,而是为了把状态变化集中在可信的方法里。
正在加载概念检查...
构造方法
__init__() 是构造方法(constructor),会在创建对象时自动调用。
python
account = BankAccount("Alice", "6250941006528599", 50)构造方法常用于给对象设置初始状态。如果对象一创建就应该拥有某些属性,就应该在 __init__() 中初始化它们。
正在加载概念检查...
正在加载本节练习...