Тщательно поймите, что все в Python является объектом! ! !

Python

предисловие

Я до сих пор помню, когда я изучал Python,Python все является объектомЭто очень сбивает с толку, потому что Python — это объектно-ориентированный динамический язык, и в применении функций и функций более высокого порядка, если у вас нет очень глубокого понимания всего, что является объектом, а основа не так прочна, затем для будущего развития Python.С точки зрения порядка, это немного тормоз.Поскольку друг связался со мной и сказал, что понимание всего, что является объектом, не слишком прочно, то этот блог Muzi обобщает эту точку знаний . Если что-то не так, пожалуйста, поправьте меня.


Кратко

Долгосрочное короткое изречение, эта статья в основном нацеленаPython все является объектомОбсуждать, в основном, со следующих двух аспектов:

Гражданин Python первого класса

Связь между типом, объектом и классом

Для распространенных встроенных типов Python в этой статье не будут подробно описаны

Встроенные типы: Нет (в глобальном масштабе только один) Числовые типы: int, float, complex (complex), bool Тип итерации Тип последовательности: список, байты, диапазон, кортеж, строка, массив тип карты: дикт Тип коллекции: набор, замороженный набор Тип управления контекстом: с


Гражданин Python первого класса

Что такое гражданин первого класса?

  • присваивается переменной
  • может быть добавлен в объект коллекции
  • Может быть передан как параметр функции
  • Может использоваться как возвращаемое значение функции

Для назначения переменным и объектам, добавленным в коллекцию, код для отображения:

def func(name='Python'):
    print(f'the func is {name}')


class Test:
    def __init__(self):
        print(f'the class is {Test.__name__}')

obj_list = []
obj_list.append(func)
obj_list.append(Test)

for item in obj_list:							# 添加至集合对象中
    print(item())

Затем в приведенном выше примере результат выполнения кода выглядит следующим образом:

the func is Python								# 函数func运行,打印结果
None											# 函数func因没有return,返回None
the class is Test								# 类Test运行,打印结果
<__main__.Test object at 0x0000024AB34526A0>	# 类Test运行,因没有返回值,调用item(),返回类Test的对象

Затем для параметров, которые могут быть переданы в качестве параметров, показан следующий код:

def func(name='Python'):
    print(f'the func is {name}')

def decorator_func():
    print(f'the decorator_func is running')
    return func									# 返回函数func

my_test = decorator_func()
my_test('木子的三维世界')						# 传递参数,调用func

Результат выполнения приведенного выше кода выглядит следующим образом:

the decorator_func is running
the func is 木子的三维世界

Связь между типом, объектом и классом

Приведенный выше код должен продемонстрировать, что является первоклассным гражданином Python, поэтому я думаю, что некоторые коллеги-даосы до сих пор не совсем понимают, почему все является объектом в Python, так что вот и настало время.После понимания типа, объекта и класса, Музи считает, что каждый должен полностью выдержать живое выступление. Для простоты понимания приведен код:

# 示例如下
a=2019
b="一切皆对象"
print(type(2019))
print(type(int))
print(type(b))
print(type(str))

class Student:
    pass

stu = Student()
print(type(stu))
print(type(Student))
print(int.__bases__)
print(str.__bases__)
print(Student.__bases__)
print(type.__bases__)
print(object.__bases__)
print(type(object))
print(type(type))

Результат выполнения приведенного выше кода выглядит следующим образом:

<class 'int'>									# 2019是由int这个类创建的实例
<class 'type'>									# int这个类是由type这个类创建的实例
<class 'str'>									# 同上
<class 'type'>								
<class '__main__.Student'>						# stu是类Student创建的实例
<class 'type'>									# 类Student是由type这个类创建的实例
(<class 'object'>,)								# 类int的基类是object这个类
(<class 'object'>,)								# 同上
(<class 'object'>,)								# 同上
(<class 'object'>,)								# 重点:类type的基类也是object这个基类
()												# 重点:类object没有基类
<class 'type'>									# 难点:类object是由类type创建的实例
<class 'type'>									# 难点:类type是由type类自身创建的实例

Для приведенного выше кода мы можем сделать следующие выводы:

  1. Тип класса создает экземпляр int, а класс int имеет экземпляр типа 2019.
  2. Объект класса является базовым классом верхнего уровня.
  3. тип также является классом, а также объектом

Должно быть, есть друзья-даосы, которые немного сбиты с толку, увидев приведенный выше код. Пожалуйста, посмотрите на изображение ниже:

type、object和class的关系图

для картинки вышеЧитать следующим образом:

  1. object — это все объекты: базовый класс list, str, dict, tuple и object — это экземпляр типа
  2. Тип класса является экземпляром самого себя, и тип также наследуется от класса объекта.
  3. Из вывода 1 и вывода 2 делается вывод, что все является объектом, и все наследуется от класса объекта

Суммировать

Python Все подчинено функциональному программированию, а также различным высокоуровневым применениям Python. Если вам не очень понятно, тосм. больше фотографий выше, если все в порядке, посмотри еще, если не плохо. . . Хорошо, больше разговоров

Так что вы, должно быть, видели это, и у вас уже есть четкое представление обо всем в Python.Muzi обновит статью в будущем.Блог о метаклассах Python, сегодня также предзнаменование.

Примечания: почему класс типов может быть собственным экземпляром, заинтересованные даосы могут понять концепцию указателей.

Поздно, ложитесь спать, чтобы спать, завтра работать в понедельник. . .