python关于类的介绍

**

python关于类的介绍

**

类的定义

Python 是完全面向对象的:你可以定义自己的类,从你自己或 系统自带的类继承,并生成实例。
在 Python 里定义一个类非常简单。就像函数一样, 没有分开 的接口定义。 只需定义类就开始编码。 Python 类以保留字 class 开始, 后面跟类名。 技术上来说,只需要这么多就够 了,因为一个类不是必须继承其他类。

class PapayaWhip:  ① 
    pass           ② 

  1. 类名是 PapayaWhip, 没有从其他类继承。 类名通常是大写字 母分隔, 如 EachWordLikeThis, 但这只是个习惯,并非必须。
  2. 你可能猜到,类内部的内容都需缩进,就像函数中的代码一 样, if 语句, for 循环, 或其他代码块。第一行非缩进代码表 示到了类外。
    PapayaWhip 类没有定义任何方法和属性, 但依据句法,应该在 定义中有东西,这就是 pass 语句。 这是 Python 保留字,意思 是“继续,这里看不到任何东西”。 这是一个什么都不做的语 句,是一个很好的占位符,如果你的函数和类什么都不想做 (删空函数或类)。

☞Python 中的 pass 就像 Java 或 C 中的空大括号对 ({})

很多类继承自其他类, 但这个类没有。 很多类有方法,这个类 也没有。 Python 类不是必须有东西,除了一个名字。 特别是 C++ 程序员发现 Python 类没有显式的构造和析构函数会觉得很 古怪。 尽管不是必须, Python 类 可以 具有类似构造函数的东 西: init() 方法

INIT() 方法

本示例展示 Fib 类使用 init 方法。

class Fib: 
    '''生成菲波拉稀数列的迭代器'''  ① 
 def __init__(self, max):
  1. 类同样可以 (而且应该) 具有 docstring, 与模块和方法一 样。
  2. 类实例创建后,init() 方法被立即调用。很容易将其— —但技术上来说不正确——称为该类的“构造函数” 。 很容易, 因为它看起来很像 C++ 的构造函数(按约定,init() 是类 中第一个被定义的方法),行为一致(是类的新实例中第一片 被执行的代码), 看起来完全一样。 错了, 因为__init__() 方法调用时,对象已经创建了,你已经有了一个合法类对象的 引用。

每个方法的第一个参数,包括 init() 方法,永远指向当前 的类对象。 习惯上,该参数叫 self。 该参数和 C++或 Java 中 this 角色一样, 但 self 不是 Python 的保留字, 仅仅是个命名 习惯。 虽然如此,请不要取别的名字,只用 self; 这是一个很 强的命名习惯。
init() 方法中, self 指向新创建的对象; 在其他类对 象中, 它指向方法所属的实例。尽管需在定义方法时显式指定 self ,调用方法时并 不 必须明确指定。 Python 会自动添加。

实例化类

Python 中实例化类很直接。 实例化类时就像调用函数一样简 单,将 init() 方法需要的参数传入。 返回值就是新创建的 对象。

>>> import fibonacci2 
>>> fib = fibonacci2.Fib(100)>>> fib                        ② 
`<fibonacci2.Fib object at 0x00DB8810> 
>>> fib.__class__              ③ 
<class 'fibonacci2.Fib'> 
>>> fib.__doc__                ④ 

生成菲波拉稀数列的迭代器' 
  1. 你正创建一个 Fib 类的实例(在 fibonacci2 模块中定义) 将 新创建的实例赋给变量 fib。 你传入一个参数 100, 这是 Fib 的__init__()方法作为 max 参数传入的结束值。
  2. fib 是 Fib 的实例。
  3. 每个类实例具有一个内建属性, class, 它是该对象的 类。 Java 程序员可能熟悉 Class 类, 包含方法如 getName() 和 getSuperclass() 获取对象相关元数据。 Python 里面, 这类元 数据由属性提供,但思想一致。
  4. 你可访问对象的 docstring ,就像函数或模块中的一样。 类 的所有实例共享一份 docstring。

☞Python 里面, 和调用函数一样简单的调用一个 类来创建该类的新实例。 与 C++ 或 Java 不一样, 没有显式的 new 操作符

实例变量
继续下一行:

class Fib: 
    def __init__(self, max): 
        self.max = max        ① 
  1. self.max 是什么? 它就是实例变量。 与作为参数传入 init() 方法的 max 完全是两回事。 self.max 是实例内 “全 局” 的。 这意味着可以在其他方法中访问它。
class Fib: 
    def __init__(self, max): 
        self.max = max        ① 
    . 
    . 
    . 
    def __next__(self): 
        fib = self.a 
        if fib > self.max:
  1. self.max 在 init() 方法中定义……
  2. ……在 next() 方法中引用。

实例变量特定于某个类的实例。 例如, 如果你创建 Fib 的两个 具有不同大值的实例, 每个实例会记住自己的值

>>> import fibonacci2 
>>> fib1 = fibonacci2.Fib(100) 
>>> fib2 = fibonacci2.Fib(200) 
>>> fib1.max 
100 
>>> fib2.max 
200 
发布了9 篇原创文章 · 获赞 28 · 访问量 3845

猜你喜欢

转载自blog.csdn.net/qq_44761063/article/details/104694175