知识点
在 Python 中,所有数据类型都可以视为对象。也可以自定义对象,自定义的对象数据类型就是面向对象中的类(Class)的概念。
- 类的定义
- 对象初始化
定义类
使用以下语法定义类:
class nameoftheclass(ParentClass) :
statement1
statement2
statement3
在类的声明中可以写任何 Python 语句,包括函数(在类中称为方法)。
>>> class MyClass(object) :
... """A simple example class"""
... i = 12345
... def f(self) :
... return 'hello world'
init 方法
类的实例化使用函数符号。只要将类对象看作是一个返回新的类实例的无参数函数即可。
x = MyClass() # 创建一个新的类实例并将该对象赋给变量 x
这个实例化操作创建一个空的对象。如果在类中定义一个名为 __init__()
的特殊方法,可以将其创建为有初始状态的对象。
def __init__(self) :
self.data = []
在类中定义 __init__()
方法,类的实例化操作会自动为新创建的类实例调用 __init__()
方法。
当然,出于弹性的需要,__init__()
方法可以有参数。事实上,参数通过 __init__()
传递到类的实例化操作上。
>>> class Complex :
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
继承
当一个类继承另一个类时,它将继承父类的所有功能(如变量和方法)。这有助于重用代码。
class MyClass(ParentClass) :
def __init__(self) :
ParentClass.__init__(self)
多继承
一个类可以继承自多个类,具有父类的所有变量和方法,语法如下:
class MyClass(Parentclass1, Parentclass2, ...) :
def __init__(self):
Parentclass1.__init__(self)
Parentclass2.__init__(self)
...
...
删除对象
使用关键字 del 删除一个对象。
>>> s = "I love you"
>>> del s
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
del 实际上使对象的引用计数减少一,当对象的引用计数变成零的时候,垃圾回收器会删除这个对象。
属性(attributes)读取方法
在 Python 里直接使用属性就可以了,请不要使用属性(attributes)读取方法(getters 和 setters),更不需要在类中定义属性读取方法。
装饰器
@property 装饰器负责把一个方法变成属性调用的。本质上,装饰器也是一种高阶函数。
使用 @property 装饰器可以更精确的调整控制属性访问权限。
总结
- 类的定义
- 对象初始化
- 类的继承以及多继承
- 装饰器