# Python 对象和类
> 原文: [https://thepythonguru.com/python-object-and-classes/](https://thepythonguru.com/python-object-and-classes/)
* * *
于 2020 年 1 月 7 日更新
* * *
## 创建对象和类
* * *
Python 是一种面向对象的语言。 在 python 中,所有东西都是对象,即`int`,`str`,`bool`甚至模块,函数也是对象。
面向对象的编程使用对象来创建程序,这些对象存储数据和行为。
## 定义类
* * *
python 中的类名以`class`关键字开头,后跟冒号(`:`)。 类通常包含用于存储数据的数据字段和用于定义行为的方法。 python 中的每个类还包含一个称为*初始化器*的特殊方法(也称为构造器),该方法在每次创建新对象时自动被调用。
让我们来看一个例子。
```py
class Person:
# constructor or initializer
def __init__(self, name):
self.name = name # name is data field also commonly known as instance variables
# method which returns a string
def whoami(self):
return "You are " + self.name
```
在这里,我们创建了一个名为`Person`的类,其中包含一个名为`name`和方法`whoami()`的数据字段。
## 什么是`self`?
* * *
python 中的所有方法(包括一些特殊方法,如初始化器)都具有第一个参数`self`。 此参数引用调用该方法的对象。 创建新对象时,会自动将`__init__`方法中的`self`参数设置为引用刚创建的对象。
## 从类创建对象
* * *
```py
p1 = Person('tom') # now we have created a new person object p1
print(p1.whoami())
print(p1.name)
```
**预期输出**:
```py
You are tom
tom
```
**注意**:
当您调用一个方法时,您无需将任何内容传递给`self`参数,python 就会在后台自动为您完成此操作。
您也可以更改`name`数据字段。
```py
p1.name = 'jerry'
print(p1.name)
```
**预期输出**:
```py
jerry
```
尽管在类之外授予对您的数据字段的访问权是一种不好的做法。 接下来,我们将讨论如何防止这种情况。
## 隐藏数据字段
* * *
要隐藏数据字段,您需要定义私有数据字段。 在 python 中,您可以使用两个前划线来创建私有数据字段。 您还可以使用两个下划线定义私有方法。
让我们看一个例子
```py
class BankAccount:
# constructor or initializer
def __init__(self, name, money):
self.__name = name
self.__balance = money # __balance is private now, so it is only accessible inside the class
def deposit(self, money):
self.__balance += money
def withdraw(self, money):
if self.__balance > money :
self.__balance -= money
return money
else:
return "Insufficient funds"
def checkbalance(self):
return self.__balance
b1 = BankAccount('tim', 400)
print(b1.withdraw(500))
b1.deposit(500)
print(b1.checkbalance())
print(b1.withdraw(800))
print(b1.checkbalance())
```
**预期输出**:
```py
Insufficient funds
900
800
100
```
让我们尝试访问类外部的`__balance`数据字段。
```py
print(b1.__balance)
```
**预期输出**:
```py
AttributeError: 'BankAccount' object has no attribute '__balance'
```
如您所见,现在在类外部无法访问`__balance`字段。
在下一章中,我们将学习[运算符重载](/python-operator-overloading/)。
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象