zoukankan      html  css  js  c++  java
  • python的类

    一、语法

    python类的机制是 C++ 的类机制和 Modula-3 的类机制的混合体:

    允许多继承的类继承机制,派生类可以重写它父类的任何方法,一个方法可以调用父类中重名的方法;

    1.动态特性: 类可以被动态创建, 并且可以在创建之后被修改;

    2.类的成员 (包括数据成员) 通常都是 public的 (例外见下私有变量 (page 95)), 并且所有的成员函数都是 virtual 的;

    3.Python 中没有关联对象成员和方法的隐式表达: 所有方法函数在声明时显式地将第一个参数表示为对象, 这个参数的值在方法被调用时隐式赋值;

    4.Python 类本身就是对象. 这就提供了导入和重命名的语义;

    5.与 C++ 和 Modula-3 不同的是, Python 的内置类型可以被当做基类来让使用者扩展;

    6.另外, 像 C++ 一样, 大多数有特殊语法的内置操作符 (算数运算符, 下标操作符等等) 在类的实例中都可以重定义;

    二、对象的别名

    由于在实现的时候传递的是指针, 所以传递一个对象的开销很小;

    三、命名空间

    1.可以利用keyword:   del 语句来删除可写属性.

    例如, del modname.the_answer 将从名为 modname 的模块中移除属性 the_answer.

    2. import 语句, 和函数定义都将模块或函数绑定到了当前作用域.

    四、类对象&实例对象

     

    那么, MyClass.i 和 MyClass.f 就是合法的属性引用, 分别返回一个整数和一个函数对象.

    类属性也可以被指定, 所以你可以给 MyClass.i 赋值以改变其数值.

    实例化:(实例对象)

    x = MyClass();

    1.构造方法:

    def __init__(self):

    2.方法对象&函数对象:

    x.f      是一个 method object,

     MyClass.f    是 一个function object.

    x.f() 是严格等价于MyClass.f(x)

    五、继承

    1.派生类定义

    BaseClassName 的定义对于派生类是可见的

    class DerivedClassName(BaseClassName):

    基类定义在另一个模块

    class DerivedClassName(modname.BaseClassName):

    2.多重继承

    python支持多重继承

    class DerivedClassName(Base1, Base2, Base3):

    六、私有变量

    以一个下划线带头的名字 (如 _spam) 应该作为非公共的 API (不管是函数, 方法或者数据成员).

     七、空的类定义

    一段 Python 代码中如果希望一个抽象的数据类型, 那么可以通过传递
    一个类给那个方法, 就好像有了那个数据类型一样.

    八、迭代器

    定义一个 __iter__() 方法用以返回一个具有 __next__() 的对象. 如
    果这个类定义了 __next__() , 那么 __iter__() 仅需要返回 self:

     

  • 相关阅读:
    cogs 2507 零食店
    动态规划练习们~
    codevs 访问艺术馆
    搜索练习 (主要练剪枝23333)
    codevs 3119 高精度练习之大整数开根 (各种高精+压位)
    EntityFramework 两个参数连续(中间有空格)问题
    Mysql DELETE 不能使用别名? 是我不会用!
    MySQL 空间数据 简单操作
    C# String 字符拼接测试(“+”、string.Format、StringBuilder 比较)
    EntityFramework 事物引发的问题
  • 原文地址:https://www.cnblogs.com/eniac1946/p/7301204.html
Copyright © 2011-2022 走看看