Python отражательная интроспекция

День 5. питон самоанализ

Это долгое время , чтобы написать раньше, когда понятие самоанализа и рефлексии не понял, после изучения Java немного больше понимания, самоанализ является возможность получить объект рефлексии является способность манипулировать объектами, использование питона getattr()и setattr()реализовать отражение, в то время как другие является самоанализом, следующее содержание , чтобы смешать два вместе , чтобы сказать, но не хочет , чтобы изменить содержание Рори это повторы, окончательное резюме вышеупомянутого

метод эффект
Помогите() Просмотр Функциональный модуль использует подробное описание
DIR () Верните все свойства объекта
тип() Типы Просмотр объектов
Hsattr () Проверьте, есть ли у объекта конкретного свойства
GetAttr () Чтобы дать свойство объекта конкретного
SetAttr () Установить конкретные свойства объекта
isinstance () Определение, является ли объект типа известен
issubclass () Анализируя класс не является подклассом другого класса
Я бы() Возвращаемое значение адреса
вызываемый () Определить, может ли объект позвонить

При вычислении типа самоанализ является способность программы для изучения типа или свойства объекта во время выполнения. Некоторые языки программирования обладают этой способностью.
В информатике, самоанализ относится к компьютерной программе во время выполнения (Время работы ) осмотр объекта (Объект) тип способность, как правило , также упоминается как проверки типов времени выполнения

Это Википедия объяснение интроспекции (самоанализ), популярных говоря, самоанализ в программе работает, работает способность знать тип объекта, большинство языков имеют эту возможность (есть путь в типа известных объектов), таких как C ++, Java и т.д.

Конечно, саморефлексия и не только для типа объекта, таких как питон самоанализ может знать свойство объекта, есть некоторые другие понимания

В повседневной жизни, интроспекция (самонаблюдение) является своим родом поведения самоанализа.

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

Тип интроспекции является объектно-ориентированным языком программирования, написанный во время выполнения, чтобы знать объект: это немного более простым. Это простая, время выполнения тип объекта может быть известно.

Например, C ++ интроспекции (из Википедии)

C ++ тип информации (RTTI) TypeId и dynamic_cast ключевого слова поддержки типа интроспекции времени выполнения через. dynamic_cast выражение может быть использовано для определения того, принадлежит ли конкретный объект к определенному производному классу. Например:

Person* p = dynamic_cast<Person *>(obj);
if (p != nullptr) {
  p->walk();
}

TypeId станд :: type_info оператора для получения объекта, производного типа описания данного объекта:

if (typeid(Person) == typeid(*obj)) {
  serialize_person( obj );
}

PHP самоанализ (из Википедии)

В PHP InstanceOf оператор может использовать переменный PHP определяет, является ли конкретным экземпляром класса

if ($obj instanceof Person) {
    // Do whatever you want
}

Java самоанализ (из Википедии)

Простейшим примером является тип самоанализ Java InstanceOf оператора. InstanceOf оператору определить объект специфический принадлежит к определенному классу (или подкласса этого класса или класса, который реализует интерфейс). Например:

if (obj instanceof Person) {
    Person p = (Person)obj;
    p.walk();
}

5,1 питон способ достижения самоанализа

Есть много способов для достижения саморефлексии питона, обычно используемая помощи (), реж (), типа (), hasattr (), GetAttr (), SetAttr (), isinstance (), issubclass (), идентификатора (), вызываемый ()

5.1.1 помощь ()

функция помощи () является функцией для просмотра или использования модуля в деталях. Преобладающе в окружающей среде IDE является, имеет функцию, чтобы принять любой объект или метод, печатает из документации всех функций и строк

Как вы можете печатать документы непосредственно справки ОС модуль

import os
help(os)
# Help on module os:
#
# NAME
#     os - OS routines for NT or Posix depending on what system we're on.
#
# DESCRIPTION
# 后面的省略了

Мы можем также пользовательский класс, функция или модуль

class Demo:
    """
    this is a Demo
    """
    classVar = 0

    def __init__(self):
        self.var1 = 1

    def output(self):
        print(self.var1)

if __name__ == '__main__':
    help(Demo)

После запуска распечатает полную информацию об этом классе

Help on class Demo in module __main__:

class Demo(builtins.object)
 |  this is a Demo
 |  
 |  Methods defined here:
 |  
 |  __init__(self)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  output(self)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  classVar = 0

Примеры объекта распечатать такую ​​информацию,

Функция справки будет распечатать документ, он не будет печатать ни

 def demoMethods(a):
        """
        这是一个示例函数
        :param a: 示例形参
        :return: None
        """
        print(a)
    help(demoMethods)
# Help on function demoMethods in module __main__:

# demoMethods(a)
#     这是一个示例函数
#     :param a: 示例形参
#     :return: None

Более детальный взгляд на эту статью

Python- механизм самоанализа

5.1.2 реж ()

DIR () является функцией без аргументов, возврата переменной в текущей области, и способ типа, определенного в списке, когда аргументы, и возвращает атрибуты параметров, список методов. Если параметр включает в себя метод __dir __ (), который будет называться. Если параметр не содержит __dir __ (), который будет максимизировать сбор информации о параметрах.

dir()
['__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'sys']
dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

5.1.3 hasattr (), GetAttr (), SetAttr ()

class Demo:
    def __init__(self):
        self.var1 = 0
        self.var2 = 1

if __name__ == '__main__':
    demo = Demo()
    if hasattr(demo,'var1'):
        setattr(demo,'var1',2)
    print(getattr(demo,'var1','not find'))  # 2
    print(getattr(demo,'var11','not find'))  # not find
  • Hsattr ()
def hasattr(*args, **kwargs): # real signature unknown
    """
    Return whether the object has an attribute with the given name.
    返回对象是否具有给定名称的属性。

    This is done by calling getattr(obj, name) and catching AttributeError.
    这是通过调用getattr(obj,name)并捕获AttributeError来完成的.
    """
    pass
  • SetAttr ()
def setattr(x, y, v): # real signature unknown; restored from __doc__
    """
    Sets the named attribute on the given object to the specified value.
    将给定对象的命名属性设置为指定值。

    setattr(x, 'y', v) is equivalent to ``x.y = v''
    setattr(x,‘y’,v)等价于“x.y=v”
    """
    pass
  • GetAttr ()
def getattr(object, name, default=None): # known special case of getattr
    """
    getattr(object, name[, default]) -> value

    Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
    When a default argument is given, it is returned when the attribute doesn't
    exist; without it, an exception is raised in that case.
    从对象中获取指定名称的属性;getattr(x,‘y’)等同于X.Y。
    如果给定了默认参数,则未找到该属性时将返回该参数。
    如果未指定,则会引发异常。
    """
    pass

5.1.4 isinstance (), issubclass ()

>>> help(isinstance)
Help on built-in function isinstance in module builtins:

isinstance(obj, class_or_tuple, /)
    Return whether an object is an instance of a class or of a subclass thereof.
    返回对象是类的实例还是其子类的实例。
    A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
    check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
    or ...`` etc.

Экземпляр похож на тип (), просто наберите () не считает, что это подкласс типа родительского класса, без учета наследования. isinstance () будет рассматриваться суб-класс представляет собой тип родительского класса, рассмотрим наследование.

>>> class A:
	pass

>>> a = A()
>>> isinstance(a,type)
False
>>> class B(A):
	pass

>>> b=B()
>>> isinstance(b,A)
True
>>> isinstance(int,type)
True
>>> isinstance(A,type)
True
>>> isinstance(b,type)
False
>>> isinstance(True,int)
True

Можно видеть, класс является подтипом типа, но также проверить класс юаней за день до вчерашнего дня, и Boolean является подклассом междунара

И issubclass () используется для определения класса является подклассом другого класса не два параметра передаются во имя класса

>>> issubclass(B,A)
True

5.1.5 Идентификатор () 和 вызываемым ()

  • Идентификатор (): используется для получения адреса памяти объекта
  • вызываемый (): определить, является ли объект можно назвать.

5.1.6 типа ()

Эта функция записывается в метаклассе, параметр типа при входящем возврате объекта, который более широко используемый метод Python самоанализа

5.2 резюме

  • Что такое интроспекция

Это просто программа работает, чтобы знать тип объекта (а также атрибуты и т.д.) способность к

  • метод Python для достижения самоанализа
метод эффект
Помогите() Просмотр Функциональный модуль использует подробное описание
DIR () Верните все свойства объекта
тип() Типы Просмотр объектов
Hsattr () Проверьте, есть ли у объекта конкретного свойства
GetAttr () Чтобы дать свойство объекта конкретного
seetattr () Установить конкретные свойства объекта
isinstance () Определение, является ли объект типа известен
issubclass () Анализируя класс не является подклассом другого класса
Я бы() Возвращаемое значение адреса
вызываемый () Определить, может ли объект позвонить

Справочная статья

вопросы лицо питона

википедия Тип самоанализ

Python самоанализа (отражение) принципы [очередь]

Он сказал, что в этой статье

В автора, то есть моя концепция, самоанализ и отражение одна вещь, конечно, на самом деле, я не очень уверен, и убедитесь, что ...

Но я видел это предложение Википедия

Интроспекция не следует путать с отражением, который идет на шаг вперед и является способность к программе манипулировать ценности, мета-данные, свойства и / или функции объекта во время выполнения.

Это не то же самое, самоанализ и рефлексия, интроспекция является возможность получить доступ к типу объекта, и манипулирование объектом является значение, отражающий атрибуты способность метаданных и / или функции

Python самоанализа часто используемые функции

Python- механизм самоанализа

Python самоанализа

Rookie Учебное пособие

Опубликовано 62 оригинальные статьи · вона похвала 33 · просмотров 10000 +

рекомендация

отblog.csdn.net/zjbyough/article/details/96037399