Python 中的类和对象是语言的关键部分。如果不理解课程和对象,就无法正确地学习 Python。在这一章中,您将学习: - 如何在蟒蛇一切都是一个对象
- 如何在Python中创建自己的类和对象
- 什么是继承
当您只是创建小脚本时,您很可能不需要创建自己的类。但是,一旦您开始创建更大的应用程序,对象和类允许您自然地组织您的代码。 在深入了解所有细节之前,我们将先看看引擎盖下。我这样做是因为我相信这会让你更好地了解这些概念。不要让此页面的长度使您灰心丧气。在彻底阅读并尝试实例之后,您应该对 Python 中的类和对象有很好的了解。如果不是...在论坛上留言,告诉我你被困在哪里了。我很乐意帮你度过难关。 好的:让我们潜入!您可能知道内置功能。它只是返回你给它的对象的长度。但是,比如说,数字五的长度是多少呢?让我们问问蟒蛇:len() [size=1em][size=1em][size=1em]>>> len(5)
[size=1em]Traceback (most recent call last):
[size=1em] File "<stdin>", line 1, in <module>
[size=1em]TypeError: object of type 'int' has no len()
|
我喜欢错误,因为它们说明了Python在内部的工作原理。在这种情况下,Python告诉我们,5是一个对象,它没有。在Python,一切都是一个对象。刺痛,嘘声,数字,甚至功能都是对象。我们可以使用内置功能检查 REPL 中的对象。当我们尝试数字 5 时,它会显示一大堆属于任何数字对象的函数:len()dir()dir [size=1em][size=1em][size=1em]>>> dir(5)
[size=1em]['__abs__', '__add__',
[size=1em]'__and__', '__bool__',
[size=1em]'__ceil__', '__class__',
[size=1em]...
[size=1em]'__str__', '__sub__',
[size=1em] '__subclasshook__', '__truediv__',
[size=1em] '__trunc__', '__xor__',
[size=1em]'bit_length', 'conjugate',
[size=1em]'denominator', 'from_bytes',
[size=1em] 'imag', 'numerator',
[size=1em]'real', 'to_bytes']
|
为了清楚起见,我稍微截断了一下名单。 列表从这些奇怪的命名功能开始,其中包含下划线,如。这些被称为魔法方法,或凹凸不已经(双下划线的缩求)方法。如果你仔细观察,你会发现没有对类型对象的dunder方法。这就是 Python 的功能如何知道数字没有长度。所有做的,就是调用你提供的对象上的方法。这也是为什么 Python 抱怨 "类型 'int' 的对象没有伦 ()" 的原因。__add____len__intlen()len()__len__() 什么是蟒蛇方法?我在这里随便介绍了单词方法。让我更正式地定义它: 方法当一个函数是对象的一部分时,我们称之为一种方法。所以,如果一个字符串确实有一个长度,它必须有一个len方法,对不对?让我们来看看! [size=1em][size=1em][size=1em]>>> dir("test")
[size=1em]['__add__', '__class__',
[size=1em]'__contains__', '__delattr__',
[size=1em]'__dir__', '__doc__',
[size=1em]'__eq__', '__format__',
[size=1em]'__ge__', '__getattribute__',
[size=1em]'__getitem__', '__getnewargs__',
[size=1em]'__gt__', '__hash__', '__init__',
[size=1em]'__init_subclass__', '__iter__',
[size=1em]'__le__', '__len__', '__lt__',
[size=1em]'__mod__', '__mul__', '__ne__',
[size=1em]'__new__', '__reduce__',
[size=1em]'__reduce_ex__', '__repr__',
[size=1em]'__rmod__', '__rmul__',
[size=1em]'__setattr__', '__sizeof__',
[size=1em]'__str__', '__subclasshook__',
[size=1em]'capitalize', 'casefold', 'center',
[size=1em]'count', 'encode', 'endswith',
[size=1em]'expandtabs', 'find', 'format',
[size=1em]'format_map', 'index', 'isalnum',
[size=1em]'isalpha', 'isascii', 'isdecimal',
[size=1em]'isdigit', 'isidentifier', 'islower',
[size=1em]'isnumeric', 'isprintable', 'isspace',
[size=1em]'istitle', 'isupper', 'join', 'ljust',
[size=1em]'lower', 'lstrip', 'maketrans',
[size=1em]'partition', 'replace', 'rfind',
[size=1em]'rindex', 'rjust', 'rpartition',
[size=1em]'rsplit', 'rstrip', 'split',
[size=1em]'splitlines', 'startswith', 'strip',
[size=1em]'swapcase', 'title', 'translate',
[size=1em]'upper', 'zfill']
|
是的,就在那儿由于这是一种方法,我们也可以称之为: [size=1em][size=1em][size=1em]>>> "test".__len__()
[size=1em]4
|
这相当于但不太优雅,所以不要这样做。只是为了说明这些东西是如何工作的。len("test") 还有一个列表,其他不那么神奇的方法,揭示给我们。随意尝试一些,如:dir()islower [size=1em][size=1em][size=1em]>>> "test".islower()
[size=1em]True
|
这种方法检查,如果整个字符串是小写,这是,所以Python返回布尔。其中一些方法需要一个或多个参数,如替换:True [size=1em][size=1em][size=1em]>>> 'abcd'.replace('a', 'b')
[size=1em]'bbcd'
|
它将"a"的所有事件替换为"b"。
|