类
面向对象程序设计(Object-Oriented Programming)是关于如何使用对象创建程序的编程模式。一个对象有独特的特性、状态和行为
- 对象的特性就像人的身份证号码,Python 会在创建每一个对象时自动对每个对象赋予一个独特的 id 辨识这个对象
- 对象的状态用变量表示,也称为对象的数据域
- 对象的行为在 Python 中用方法来定义
类的定义
- Python 为类提供了一种特殊的方法:__init__(),即初始化程序,它在创建和初始化新对象时被调用,例如以下的 Circle 类定义表明每个 Circle 对象被声明时都会被初始化 radius:
import math Class Circle: # Construct a circle object def __init__(self, radius = 1): self.radius = radius def getPerimeter(self): return 2 * self.radius * math.pi def getArea(self): return self.radius * self.radius * math.pi def setRadius(self, radius): self.radius = radius
构造对象
根据上述定义,当想要创造一个 Circle 对象时,可以指定 radius 参数,也可以使用默认值:
# 指定 radius 参数
c1 = Circle(100)
# 使用默认值
c2 = Circle()
不变对象和可变对象
- Python 中调用函数时传给被调用函数的参数是原始参数的引用
- 如果我们使用了 Python 自带的数据类型如整数类型、浮点数类型、字符串等数据作为被传参数,则无论被调用函数怎么改变参数的值,都不会影响原始对象的值,这就是不可变对象
- 相反,由用户自定义的类所产生的对象原始值是可以被函数改变的,这就叫可变对象
隐藏数据域
- 为了避免用户随意修改对象的关键数据,我们有必要对某些数据封装成私有类型,只允许对象的方法对其进行安全的操作
- 定义一个私有数据的语法是:用两个下划线开头为数据进行命名
- 注意:私有数据不能用一个以上的下划线结尾
import math Class Circle: # Construct a circle object def __init__(self, radius = 1): self.__radius = radius def getPerimeter(self): return 2 * self.__radius * math.pi def getArea(self): return self.__radius * self.__radius * math.pi def setRadius(self, radius): self.__radius = radius