飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 认识Python

    • Python 历史与特点
    • Python 2 与 Python 3 的核心差异
    • 安装与运行 Python 2.7.18
    • 编码规范 PEP 8
  • 第2章 基础语法

    • 变量与对象
    • 数字类型
    • 字符串 str
    • Unicode 字符串
    • 运算符
    • 空值 None
  • 第3章 流程控制

    • if 条件语句
    • if-else 条件语句
    • if-elif-else 多分支
    • 条件表达式(三元运算符)
    • while 循环
    • for 循环
    • range 与 xrange
    • 循环控制:break、continue、pass
    • 循环 else 子句
  • 第4章 数据结构

    • 列表基础
    • 列表方法
    • 列表推导式
    • 元组
    • 字典基础
    • 字典方法
    • 字典循环技巧
    • 集合
    • 序列解包
    • 序列比较
  • 第5章 函数

    • 定义函数
    • 参数传递机制
    • 默认参数
    • 关键字参数
    • 可变参数
    • Lambda 表达式
    • 文档字符串
    • 函数对象
  • 第6章 模块与包

    • import 导入
    • 模块搜索路径
    • name 与主程序
    • 编译文件 .pyc 与 .pyo
    • 包结构
    • dir() 函数
  • 第7章 文件与IO

    • 打开与关闭文件
    • 文件读写方法
    • with 上下文管理器
    • 格式化输出:% 操作符
    • 格式化输出:str.format()
    • JSON 序列化
  • 第8章 面向对象

    • 类定义与实例化
    • init 构造方法
    • 类变量与实例变量
    • 方法调用与 self
    • 继承基础
    • 多重继承
    • 新式类与旧式类
    • 私有变量与名称改写
    • 属性装饰器 property
    • 类方法与静态方法
    • 魔术方法
    • 空类与数据记录
  • 第9章 异常处理

    • 异常类型
    • try-except
    • try-except-else-finally
    • 抛出异常 raise
    • 自定义异常
    • with 语句与上下文管理器
  • 第10章 迭代器与生成器

    • 迭代器协议
    • 生成器函数
    • 生成器表达式
    • itertools模块
  • 第11章 标准库精要

    • os模块
    • sys模块
    • datetime模块
    • re模块
    • json模块
    • collections模块
    • math与random模块
    • urllib2与网络请求
    • subprocess与命令执行
    • threading与并发
    • unittest与测试
    • 虚拟环境与包管理
  • 第12章 工程实践

    • 调试技巧
    • 性能分析
    • 文档与注释
    • 下一步学习

类定义与实例化

类(Class)是面向对象编程的核心概念。它是创建对象的"模板",定义了对象的数据(属性)和行为(方法)。Python 的类机制简洁而强大,融合了 C++ 和 Modula-3 的设计理念。

定义类

class Dog(object):
    """一只简单的狗。"""
    
    kind = "canine"         # 类变量,所有实例共享
    
    def __init__(self, name):
        self.name = name    # 实例变量,每个实例独立
    
    def bark(self):
        return "%s says woof!" % self.name

class 关键字后面是类名,括号内是基类列表(Python 2 中建议显式继承 object)。缩进块是类体,通常包含方法定义和类变量。

创建实例

d = Dog("Fido")
print d.name        # Fido
print d.bark()      # Fido says woof!

Dog("Fido") 调用类对象,创建一个新实例。这个过程称为实例化。实例创建后,可以像普通对象一样使用:访问属性、调用方法、赋值给变量。

类对象 vs 实例对象

类定义执行后,会创建一个类对象:

print type(Dog)     # <type 'type'>
print Dog.kind      # canine,访问类变量
print Dog.bark      # <unbound method Dog.bark>(未绑定方法)

类对象支持两种操作:

  1. 属性引用:访问类变量和方法
  2. 实例化:调用类对象创建实例

实例对象支持一种操作:

  1. 属性引用:访问数据属性和方法
d = Dog("Fido")
print d.name        # Fido,数据属性
print d.bark()      # 调用方法
print d.kind        # canine,继承类变量

动态添加属性

Python 的类是动态的,可以在运行时给实例添加新属性:

d = Dog("Fido")
d.age = 3           # 添加新属性
print d.age         # 3

这种灵活性是 Python 动态特性的体现,但也意味着没有编译时检查——拼写错误不会报错,而是静默创建新属性:

print d.nmae        # AttributeError?不,如果之前没有 nmae,会报错
# 但如果之前误操作过 d.nmae = "x",这里就返回 "x"

类作为对象

类本身也是对象,是 type 的实例:

print type(Dog)     # <type 'type'>
print type(d)       # <class '__main__.Dog'>

类对象可以赋值给变量、存储在数据结构中、作为参数传递:

classes = [Dog, Cat, Bird]
for cls in classes:
    print cls.__name__

文档字符串

类也应该写文档字符串:

class Dog(object):
    """狗类。
    
    属性:
        kind: 物种,类变量,所有实例共享。
        name: 名字,实例变量。
    
    方法:
        bark(): 返回叫声字符串。
    """
    pass

通过 Dog.__doc__ 或 help(Dog) 访问。

空类

类体可以只包含 pass,用于创建简单的数据容器:

class Point(object):
    pass

p = Point()
p.x = 10
p.y = 20
print p.x, p.y      # 10 20

这种用法类似于 C 的 struct 或 Pascal 的 record。虽然可以用字典替代,但空类通过属性访问语法(p.x 而非 p["x"])提供了更好的可读性。

下一页
init 构造方法