返回顶部
首页 > 资讯 > 后端开发 > Python >python 中的嵌套类
  • 171
分享到

python 中的嵌套类

嵌套python 2023-01-31 05:01:55 171人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

在看 idarling 源码中,经常出现如下代码: import sys import ida_funcs import ida_kernwin from PyQt5.QtCore import ( # noqa: I20

在看 idarling 源码中,经常出现如下代码:

import sys

import ida_funcs
import ida_kernwin

from PyQt5.QtCore import (  # noqa: I202
    QAbstractItemModel,
    QModelIndex,
    QObject,
    Qt,
)
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QStyledItemDelegate, QWidget
import sip

from .widget import StatusWidget

if sys.version_info > (3,):
    long = int


class Painter(QObject):
    class ProxyItemDelegate(QStyledItemDelegate):
        def __init__(self, delegate, model, parent=None):
            super(Painter.ProxyItemDelegate, self).__init__(parent)
            self._delegate = delegate
            self._model = model

        def paint(self, painter, option, index):
            index = self._model.index(index.row(), index.column())
            self._delegate.paint(painter, option, index)

    class ProxyItemModel(QAbstractItemModel):
        def __init__(self, model, plugin, parent=None):
            super(Painter.ProxyItemModel, self).__init__(parent)
            self._model = model
            self._plugin = plugin

        def index(self, row, column, parent=QModelIndex()):
            return self.createIndex(row, column)

        def parent(self, index):
            index = self._model.index(index.row(), index.column())
            return self._model.parent(index)

        def rowCount(self):  # noqa: N802
            return self._model.rowCount()

        def columnCount(self):  # noqa: N802
            return self._model.columnCount()

        def data(self, index, role=Qt.DisplayRole):
            # Check if disabled by the user
            cursors = self._plugin.config["cursors"]
            if role == Qt.BackgroundRole and cursors["funcs"]:
                func_ea = int(index.sibling(index.row(), 2).data(), 16)
                func = ida_funcs.get_func(func_ea)
                for user in self._plugin.core.get_users().values():
                    if ida_funcs.func_contains(func, user["ea"]):
                        r, g, b = StatusWidget.ida_to_python(user["color"])
                        return QColor(StatusWidget.Python_to_qt(r, g, b))
            index = self._model.index(index.row(), index.column())
            return self._model.data(index, role)

    def __init__(self, plugin):
        super(Painter, self).__init__()
        self._plugin = plugin

        self._ida_nav_colorizer = None
        self._nbytes = 0

    def nav_colorizer(self, ea, nbytes):
        """This is the custom nav colorizer used by the painter."""
        self._nbytes = nbytes

        # There is a bug in IDA: with a huge number of segments, all the navbar
        # is colored with the user color. This will be resolved in IDA 7.2.
        cursors = self._plugin.config["cursors"]
        if cursors["navbar"]:
            for user in self._plugin.core.get_users().values():
                # Cursor color
                if ea - nbytes * 2 <= user["ea"] <= ea + nbytes * 2:
                    return long(user["color"])
                # Cursor borders
                if ea - nbytes * 4 <= user["ea"] <= ea + nbytes * 4:
                    return long(0)
        orig = ida_kernwin.call_nav_colorizer(
            self._ida_nav_colorizer, ea, nbytes
        )
        return long(orig)

    def ready_to_run(self):
        # The default nav colorized can only be recovered once!
        ida_nav_colorizer = ida_kernwin.set_nav_colorizer(self.nav_colorizer)
        if ida_nav_colorizer is not None:
            self._ida_nav_colorizer = ida_nav_colorizer
        self.refresh()

    def get_ea_hint(self, ea):
        cursors = self._plugin.config["cursors"]
        if not cursors["navbar"]:
            return None

        for name, user in self._plugin.core.get_users().items():
            start_ea = user["ea"] - self._nbytes * 4
            end_ea = user["ea"] + self._nbytes * 4
            # Check if the navbar range contains the user's address
            if start_ea <= ea <= end_ea:
                return str(name)

    def get_bg_color(self, ea):
        # Check if disabled by the user
        cursors = self._plugin.config["cursors"]
        if not cursors["disasm"]:
            return None

        for user in self._plugin.core.get_users().values():
            if ea == user["ea"]:
                return user["color"]
        return None

    def widget_visible(self, twidget):
        widget = sip.wrapinstance(long(twidget), QWidget)
        if widget.windowTitle() != "Functions window":
            return
        table = widget.layout().itemAt(0).widget()

        # Replace the table's item delegate
        model = Painter.ProxyItemModel(table.model(), self._plugin, self)
        old_deleg = table.itemDelegate()
        new_deleg = Painter.ProxyItemDelegate(old_deleg, model, self)
        table.setItemDelegate(new_deleg)

    def refresh(self):
        ida_kernwin.refresh_navband(True)
        ida_kernwin.request_refresh(ida_kernwin.IWID_DISASMS)
        ida_kernwin.request_refresh(ida_kernwin.IWID_FUNCS)

能够看到 类中 又定义了 类 ,这种情况我们称之为嵌套类 。给一个简单 demo 来认识嵌套类 。

#!/usr/bin/env python
 
import os, sys
 
class parent:
    def __init__(self):
        self.name = 'parent'
 
    def getName(self):
        print self.name
 
    class child:
        def __init__(self):
            self.name = 'child'
 
        def getName(self):
            print self.name
 
 
if __name__ == '__main__':
    child =  parent.child()
    child.getName()

zhangji16@zhangji16vm:/tmp$ python  tmp2.py
child

--结束END--

本文标题: python 中的嵌套类

本文链接: https://lsjlt.com/news/188260.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中的嵌套类
    在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下。动态语言中很好的嵌套类的实现,应该说嵌套类解决设计问题同时简化了程序,值得学习。 #!/usr/bin/env ...
    99+
    2023-01-31
    嵌套 python
  • python 中的嵌套类
    在看 idarling 源码中,经常出现如下代码: import sys import ida_funcs import ida_kernwin from PyQt5.QtCore import ( # noqa: I20...
    99+
    2023-01-31
    嵌套 python
  • Python中嵌套类的实现
    目录Q: python的类里可以写类吗Q : InnerClass 要怎么访问外部类的成员变量Q : 比如说A嵌套B,那么在B的函数里面,如何创建一个新的B对象Q: python的类...
    99+
    2023-05-14
    Python 嵌套类
  • Python中的嵌套类如何实现
    Q: python的类里可以写类吗A : 是的,Python中的类可以包含其他类,这些类被称为嵌套类或嵌套类型。在类中定义嵌套类的语法与在模块中定义类的语法相同。例如,下面是一个包含嵌套类的示例:class OuterClass: ...
    99+
    2023-05-14
    Python
  • python 库中的嵌套目录和类
    问题内容 高效导入 我正在构建的这个库中有几个嵌套目录,一些嵌套目录没有文件但其他目录没有,或者每个目录都有一个或多个类文件。 该库基本上是从另一种语言移植的,我必须保持结构相同。 ...
    99+
    2024-02-06
  • python中的函数嵌套和嵌套调用
    目录函数嵌套和嵌套调用函数的嵌套函数的嵌套调用函数中定义函数在函数内部定义的函数要在函数内部调用函数内的函数可以引用外部变量试图对外部变量进行修改函数怎么修改外部变量的值的说明函数嵌...
    99+
    2024-04-02
  • java中什么是嵌套类
    本篇文章给大家分享的是有关java中什么是嵌套类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开...
    99+
    2023-06-14
  • 详解Java 中的嵌套类与内部类
    详解Java 中的嵌套类与内部类在Java中,可以在一个类内部定义另一个类,这种类称为嵌套类(nested class)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类较少使用,非静态嵌套类使用较多,也就是常说的内部类。其中内部类又...
    99+
    2023-05-31
    java 嵌套类 内部类
  • Python中怎么if嵌套
    今天就跟大家聊聊有关Python中怎么if嵌套,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、l...
    99+
    2023-06-14
  • Python中的嵌套循环详情
    目录1 什么是嵌套循环2 Python 嵌套 for 循环2.1 嵌套循环打印图案2.2 在 for 循环中的while循环2.3 实践:打印一个带有 5 行 3 列星形的矩形图案3...
    99+
    2024-04-02
  • springboot怎么嵌套子类
    这篇文章主要介绍了springboot怎么嵌套子类的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot怎么嵌套子类文章都会有所收获,下面我们一起来看看吧。springboot嵌套子类使用在实际项目...
    99+
    2023-06-29
  • python中的字典及嵌套遍历
    目录python字典及嵌套遍历访问字典里的值修改字典删除字典元素嵌套字典遍历与内置函数字典的常用方法(定义、新增、删除、更新、遍历、嵌套等)什么是字典?为什么需要字典?字典总结pyt...
    99+
    2023-05-19
    python字典 python嵌套遍历 python遍历
  • 【Python入门篇】——Python中循环语句(while循环的嵌套应用,嵌套案例)
    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选...
    99+
    2023-08-31
    python 编程语言 数据结构 算法
  • python中什么是嵌套函数
    在python中函数的内部还定义了另一个函数,这个函数就叫嵌套函数,外部的为外函数,内部的为内函数。例:带参数的嵌套函数def outer_func(x):def inner_func(y):print(x+y)return inner_f...
    99+
    2024-04-02
  • python 嵌套型partials的使用
    要实现的目标,简单示例: from functools import partial def func1(f):     return f def func2(f1):     re...
    99+
    2024-04-02
  • Python嵌套循环的使用
    目录1 什么是嵌套循环2 Python 嵌套 for 循环2.1 嵌套循环打印图案2.2 在 for 循环中的while循环2.3 实践:打印一个带有 5 行 3 列星形的矩形图案3...
    99+
    2023-02-22
    Python嵌套循环
  • Python函数的嵌套详解
    Python允许在函数中定义函数,这通常被称为嵌套函数或者内部函数。 def speak(text): def my_lower(t): return t.l...
    99+
    2024-04-02
  • Python如何取json中的嵌套数据
    在Python中,您可以使用`json`模块来处理JSON数据。如果您要获取嵌套在JSON中的数据,可以使用点(.)或方括号([])...
    99+
    2023-09-25
    Python json
  • python如何优雅的打印嵌套类型的数据
    小编给大家分享一下python如何优雅的打印嵌套类型的数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!优雅的打印嵌套类型的数据...
    99+
    2024-04-02
  • Java嵌套类的定义及用法
    这篇文章主要讲解了“Java嵌套类的定义及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java嵌套类的定义及用法”吧!到现在为止,我们都是在Java文件中直接定义类。这样的类出现在包(...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作