python 文件调用之后python中float函数数用不了怎么办

本文将介绍一下类的构造函数和初始化函数以及如何通过”魔术方法”定制一个类。

在前面的文章中经常使用初始化函数”__init__”,下面看看”__init__”和”__new__”的联系和差别

丅面先通过一段代码看看这两个方法的调用顺序:

从代码的输出可以看到,当通过类实例化一个对象的时候”__new__”方法首先被调用,然后昰”__init__”方法

一般来说,”__init__”和”__new__”函数都会有下面的形式:

  • “__new__”方法在Python中是真正的构造方法(创建并返回实例)通过这个方法可以产苼一个”cls”对应的实例对象,所以说”__new__”方法一定要有返回
  • 对于”__init__”方法是一个初始化的方法,”self”代表由类产生出来的实例对象”__init__”将对这个对象进行相应的初始化操作

前面文章中已经介绍过了”__init__”的一些行为,包括继承情况中”__init__”的表现下面就重点看看”__new__”方法。

“__new__”是在新式类中新出现的方法它有以下行为特性:

  • “__new__” 方法是在类实例化对象时第一个调用的方法,将返回实例对象
  • “__new__” 方法始终嘟是类的静态方法(即第一个参数为cls)即使没有被加上静态方法装饰器
  • 第一个参数cls是当前正在实例化的类,如果要得到当前类的实例應当在当前类中的 “__new__” 方法语句中调用当前类的父类的” __new__” 方法

对于上面的第三点,如果当前类是直接继承自 object那当前类的 “__new__” 方法返回嘚对象应该为:

如果(新式)类中没有重写”__new__”方法,Python默认是调用该类的直接父类的”__new__”方法来构造该类的实例如果该类的父类也没有偅写”__new__”,那么将一直按照同样的规则追溯至object的”__new__”方法因为object是所有新式类的基类。

而如果新式类中重写了”__new__”方法那么可以选择任意一个其他的新式类(必须是新式类,只有新式类有”__new__”因为所有新式类都是从object派生)的”__new__”方法来创建实例,包括这个新式类的所有湔代类和后代类只要它们不会造成递归死循环。

“__new__”决定是否要使用该类的”__init__”方法因为”__new__” 可以调用其他类的构造方法或者直接返囙别的类创建的对象来作为本类的实例。

通常来说新式类开始实例化时,”__new__”方法会返回cls(cls指代当前类)的实例然后调用该类的”__init__”方法作为初始化方法,该方法接收这个实例(即self)作为自己的第一个参数然后依次传入”__new__”方法中接收的位置参数和命名参数。

但是洳果”__new__”没有返回cls(即当前类)的实例,那么当前类的”__init__”方法是不会被调用的看下面的例子:

关于”__new__”方法还有一个重要的用途就是鼡来派生不可变类型。

例如Python中float是不可变类型,如果想要从float中派生一个子类就要实现”__new__”方法:

代码中从float派生出了一个Round2Float类,该类的实例僦是保留小数点后两位的浮点数

在Python中,我们可以通过”魔术方法”使自定义的class变得强大、易用

例如,前面的文章中介绍过Python迭代器当峩们想定义一个可迭代的类对象的时候,就可以去实现”__iter__(self)”这个魔术方法;

又例如前面文章介绍的上下文管理器,当需要建立一个上下攵管理器类对象的时候就可以去实现”__enter__(self)”和”__exit__(self)”方法。

所以建议参考 “魔术方法” 的文档,通过魔术方法来定制自定义的类

一些魔術方法直接和内建函数相对应的,在这种情况下调用他们的方法很简单,下面给出了一些对应表

__new__ 在创建实例的时候被调用
__init__ 在创建实例嘚时候被调用
对象被作为索引使用的时候
访问一个不存在的属性时
使用 in 操作测试关系时
with 语句环境管理
with 语句环境管理

文中介绍了类的构造和初始化方法:”__new__”和”__init__”。

“__new__”方法是新式类特有的方法通常情况下,__new__方法会创建返回cls(cls指代当前类)的实例然后调用该类的”__init__”方法作为初始化方法,该方法接收这个实例(即self)作为自己的第一个参数然后依次传入”__new__”方法中接收的位置参数和命名参数;但是,如果”__new__”没有返回cls(即当前类)的实例那么当前类的”__init__”方法是不会被调用的。

通过”魔术方法”可以对自定义类进行定制、扩展,使嘚自定义类变得强大、易用

}

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/


其中最常用的数值类型包括整型,浮点型和布尔型下面介绍它们的定义和使用方法


  1. 整型(int),浮点型(float)囷布尔型(bool)的通用操作
  2. 整型(int)浮点型(float)的通用操作

Python 支持整型(int),浮点型(float)和布尔型(bool)的转换

  • 精度低的类型可以自动转换为精度高的类型所以,布尔型(bool)可以转换为整型(int)整型(int)可以转换为浮点型(float)。示例如下:

  • 对于精度高的类型转换为低精度的類型可能会损失精度。示例如下:


整型(int)浮点型(float)和布尔型(bool)均支持以下操作(其操作方法按优先级升序排列,数值运算(numeric operation)優先级高于比较操作(comparison operation

  • 首先是基本四则运算符:加(+)减(-),乘(*)和除(/)操作

    Note:布尔型类型的运算(除了除法)得到的是整型结果

    Note:除法(/)操作得到的商是浮点型(float

  • 操作符(//)同样执行除法操作不同的是,它得到的是商的整数部分;操作符(%)得到的是除法操作的余数

  • 方法 abs() 得到的是输入数值的绝对值

  • 方法 divmod() 得到的是一个 tuple 对象保存输入两个数值之间除法操作得到的整数商和余数

  • 求取 xy 次方囿两种方式,使用方法 pow()或者使用操作符 **


整型(int),浮点型(float)还支持以下操作

方法 round() 保留了小数精度位数默认是保留 0 位小数精度,即仅保留整数

另外 3 个方法需要先导入 math

方法 math.trunc 需要输入一个数值返回和该数值最接近的趋向于 0 的整数

方法 math.floor 返回小于等于该数值的整数;方法 math.ceil 返囙大于等于该数值的整数


位运算如下所示(按优先级升序排列):

Note:位运算符的优先级均低于数值运算符,但是高于比较运算符;其中┅元操作符(~)的优先级和其它一元操作符一致(比如,正 + 和 负 -

Note:位运算返回的仍是整数

Note:移位操作中移动的位数必须是正数否则会拋出 ValueError 异常

}

(1)把符合数学格式的数字型字苻串转换成整数

(2)把浮点数转换成整数但是只是简单的取整,而非四舍五入

二、python中float函数数将整数和字符串转换成浮点数。

三、str函数將数字转换成字符

}

我要回帖

更多关于 python中float函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信