那就好好理清楚呗 。

文章插图

文章插图

文章插图

文章插图
在我们开始探索如何写一个Pythonic对象之前,让我们先弄清楚这个术语的含义它不是关于PEP8和尊重其规则来编写漂亮的python代码;而是关于编写对象,最大限度地使用Python数据模型的概念,因此它们可以像Python标准库对象一样被自然地使用 。

文章插图

文章插图

文章插图

文章插图
其思想是将Python ADN注入到我们的用户定义对象中,使它们发生变异,并表现为本地Python对象为此,我们将实现一个向量类来表示多维向量 。

文章插图
下面的代码用最小的实现表示Vector类 。矢量由其坐标表示 。

文章插图
向量坐标存储在浮点数组中;请注意将数组中的元素类型强制设置为浮点的array type=“d” 。我们可以将任何iterable传递给Vector的构造函数,因为数组的构造函数用作接受任何iterable(元组、列表等)的内部容器 。
当我们打印一个向量对象本身时,注意我们得到它的引用(CPython的内存地址)而不是它的坐标 。让我们通过在类中实现_str_方法来更改它,使其具有更友好的输出,例如(x,y,z,…) 。
当我们打印一个向量对象本身时,注意我们得到它的引用(CPython的内存地址)而不是它的坐标 。让我们通过在类中实现_str_方法来更改它,使其具有更友好的输出,例如(x,y,z,…)注意,我们使用了从数组创建的元组的字符串表示 。
__str_不是Python数据模型用于打印对象的weiyi方法;_repr_还用于提供更面向调试目的的对象表示可以计算此表示以使用eval函数创建相同的对象 。
在前面的代码块中,请注意,与eval一起使用时repr的返回值允许创建新向量reprlib的使用允许我们在数组包含太多元素的情况下不打印数组的所有元素,并用就像向量v2 。
Python迭代为了确保我们可以在向量上循环,并且可以将它们解包,我们需要使它们可迭代为此,必须向我们的类中添加_iter_方法 。
Python长度计算为了能够通过将对象赋给len函数来获得向量内的坐标数,必须将_Len_方法添加到类中 。
Python的比较在不调整类以支持比较的情况下,应用于两个向量对象的==运算符将比较它们的引用 。若要更改此行为,必须实现“eq”方法 。在我们的例子中,两个向量是相等的,当且仅当它们具有相同的坐标且具有相同的顺序 。
让我们花点时间分析一下新的方法:通过调用len函数来使用len方法 。
通过将self和其他参数传递给zip函数来使用iter方法,zip函数接受iterable作为参数 。
Pythonic绝对值
对于此示例,我们使用该 __abs__ 方法返回由以下表达式定义的向量的欧几里得范数:
Pythonic布尔求值对于向量类的当前实现,我们在计算向量的布尔值时有以下行为 。
在我们的类中,如果没有bool方法,对bool函数的调用将引用该方法如果长度等于0,则对象的计算结果为false-否则,其计算结果为true 。
- 十大省油的SUV排行榜如何排?排名diyi最省油的是哪款?
- 电信机顶盒如何投屏
- 产后穿收腹衣是否有效?你如何评价?
- 三伏天剖腹产伤口如何护理,母乳喂养三个月暴瘦28斤能做到吗?
- 母乳喂养怎么提高母乳量 母乳喂养如何减脂不少奶,不影响奶水提前下从142到105斤?
- 新手妈妈:产后肚子松松垮垮,如何快速恢复如初?
- 今天聊一聊,家居装饰画如何选,这篇值得借鉴
- 如何减肥,怎样有苗条的身材
- 日本茑屋书店是如何锤炼自身产品力从而创业成功的
- 在《火影忍者》里,晓组织成员小南的实力如何
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
