精华内容
下载资源
问答
  • python class中为什么要有初始化init

    千次阅读 2019-12-25 14:53:25
    初始化类,意思就是我们根据这个类,去创建一个特定实例的时候,需要运行的一个函数,其作用为整个类提供一个全局变量,为后面的函数提供变量。 例如: class Circle(object): def __init__(self, r): # 初始化一...

    初始化类,意思就是我们根据这个类,去创建一个特定实例的时候,需要运行的一个函数,其作用是为整个类提供一个全局变量,为后面的函数提供变量。
    例如:

    class Circle(object):
        def __init__(self, r):  # 初始化一个属性r
            self.r = r  # 给将要创建的实例的属性r赋值
        def mianji(self):
            return (self.r*self.r*3.14)
    circle1 = Circle(2) #类的实例化
    print(circle1.mianji())
    

    个人理解init()时,这里 self相当于类的实例,只是在定义类的时候还没有被创建,也就是说,self相当于一个全局变量,self.r = r 相当于给self这个全局变量绑定上属性r。有错误的话诚请大家纠正.。
    为社么用self呢?
    我们知道一个函数的变量是不能传递给另一个函数中的变量的,这里通过self这个全局变量绑定上属性,使得其能在后面函数中使用。,

    定义好初始化__init__()后,创建的每个类都有自己的属性了,也方便调用类的方法。
    可参考下面一篇博文:python学习——类中为什么要定义__init__()方法

    展开全文
  • 我们在内核中经常遇到初始化函数是这样定义的:...那么,__init是什么意思呢?还有与其匹配的__exit呢? __init* macro __init定义在:include/linux/init.h #define __init __attribute__ ((__section__ ("....

    我们在内核中经常遇到初始化函数是这样定义的:static int __init init_func(); ,与普通函数相比,定义中多了__init。那么,__init是什么意思呢?还有与其匹配的__exit呢?

    __init* macro

    __init定义在:include/linux/init.h

    #define __init __attribute__ ((__section__ (".init.text")))
    #define __initdata __attribute__ ((__section__ (".init.data")))

    It tells the compiler to put the variable or the function in a special section, which is declared in vmlinux.lds. init puts the function in the ".init.text" section and initdata puts the data in the ".init.data" section.
    译文:__init宏告知编译器,将变量或函数放在一个特殊的区域,这个区域定义在vmlinux.lds中。__init将函数放在".init.text"这个代码区中,__initdata将数据放在".init.data"这个数据区中。

    标记为初始化的函数,表明该函数供在初始化期间使用。在模块装载之后,模块装载就会将初始化函数扔掉。这样可以将该函数占用的内存释放出来。

    __exit* macro
    __exit定义在:include/linux/init.h

    #ifdef MODULE
    #define __exit __attribute__ ((__section__(".exit.text")))
    #else
    #define __exit __attribute_used__ __attribute__((__section__(".exit.text")))
    #endif

    The exit macro tells the compiler to put the function in the ".exit.text" section. The exit_data macro tells the compiler to put the data in the ".exit.data" section.
    exit.* sections make sense only for the modules : exit functions will never be called if compiled statically. That's why there is a ifdef : exit.* sections will be discarded only if modules support is disabled.
    译文:__exit宏告知编译器,将函数放在".exit.text"这个区域中。__exitdata宏则告知编译器将数据放在".exit.data"这个区域中。
    exit.*区域仅仅对于模块是有用的:如果编译稳定的话,exit函数将永远不会被调用。只有当模块支持无效的时候,exit.*区域将被丢弃。这就是为什么定义中会出现ifdef。

    Prototype of a module
    A module must use the init and exit macros. Here is a prototype of a module :

    #include <linux/module.h> 
    #include <linux/kernel.h> 
    #define MODULE_AUTHOR "tyler@agat.net" 
    #define MODULE_DESC "Description of the module"
    int __init init_function(void) 
    { 
      /* Do something */ 
      if (err) 
        return -ERR; 
      return 0; 
    } 
    void __exit exit_function() 
    { 
      /* Do something */ 
    } 
    module_init(init_function); 
    module_exit(exit_function); 
    MODULE_LICENSE("GPL"); 
    MODULE_AUTHOR(MODULE_AUTHOR); 
    MODULE_DESCRIPTION(MODULE_DESC);

    1)所有标识为__init的函数,在链接的时候,都放在.init.text这个区域中。在这个区域中,函数的摆放顺序是和链接顺序有关的,是不确定的。
    2)所有的__init函数在区域.initcall.init中还保存了一份函数指针。在初始化时,内核会通过这些函数指针调用这些__init函数,并在整个初始化完成后,释放整个init区域 (包括.init.text, .initcall.init...)
    注:这些函数在内核初始化过程中的调用顺序只和这里的函数指针顺序有关,和1)中所述的这些函数代码本身在.init.text区域中的顺序无关。

    在2.4内核中,这些函数指针的顺序也是和链接顺序有关的,是不确定的。
    在2.6内核中,.initcall.init区域又分成了7个子区域,分别是:

    .initcall1.init
    .initcall2.init
    .initcall3.init
    .initcall4.init
    .initcall5.init
    .initcall6.init
    .initcall7.init

    当需要把函数fn放到.initcall1.init区域时,只要声明core_initcall(fn); 即可。
    其他的各个区域的定义方法分别是:

    core_initcall(fn)-->.initcall1.init
    postcore_initcall(fn)-->.initcall2.init
    arch_initcall(fn)-->.initcall3.init
    subsys_initcall(fn)-->.initcall4.init
    fs_initcall(fn)-->.initcall5.init
    device_initcall(fn)-->.initcall6.init
    late_initcall(fn)-->.initcall7.init

    而与2.4兼容的initcall(fn)则等价于device_initcall(fn).
    各个子区域之间的顺序是确定的,即先调用.initcall1.init中的函数指针,再调用.initcall2.init中的函数指针,等等。而在每个子区域中的函数指针的顺序是和链接顺序相关的,是不确定的。
    在内核中,不同的init函数被放在不同的子区域中,因此也就决定了他们的调用顺序。这样也就解决了一些init函数之间必须保证一定的调用顺序问题。
    linux下 container_of()宏的简要解析
    ARRAY_SIZE 宏还是比较有意思的,其实是个c 的编程技巧,这个技巧很有用哦!可以在include/linux/kernel.h 中找到它的定义:
    #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
    该宏可以方便的求出一个数组中有多少数据成员,这在很多情况下是很有用的,比如对于 int a[]={1,5,65,23,12,20,3} 数组,可以使用该宏求出a[] 有7 个元素。
    Linux中__init、__devinit等初始化宏
    在内核里经常可以看到__init, __devinit这样的语句,这都是在init.h中定义的宏,gcc在编译时会将被修饰的内容放到这些宏所代表的section。
    其典型的定义如下:

    #define __init __section(.init.text) __cold notrace
    #define __initdata __section(.init.data)
    #define __initconst __section(.init.rodata)
    #define __exitdata __section(.exit.data)
    #define __exit_call __used __section(.exitcall.exit)

    其典型用法如下:

    static int __init xxx_drv_init(void)
    {
      return pci_register_driver(&xxx_driver);
    }

    根据上面的定义与用法,xxx_drv_init()函数将会被link到.init.text段。
    之所以加入这样的宏,原因有2:

    1,一部分内核初始化机制依赖与它。
    如kernel将初始化要执行的init函数,分为7个级别,core_initcall, postcore_initcall, arch_initcall, subsys_initcall, fs_iitcall, device_initcall, late_initcall。这7个级别优先级递减,即先执行core_initcall, 最后执行late_initcall。通过使用文中提到的宏,gcc会将初始化代码按下面的结构安排:

    在内核初始化时,从__initcall_start到__initcall_end之间的initcall被一次执行。
    2,提高系统效率
    初始化代码的特点是,在系统启动时运行,且一旦运行后马上推出内存,不再占用内存。
    ================================================================================
    常用的宏:
    __init,标记内核启动时所用的初始化代码,内核启动完成后就不再使用。其所修饰的内容被放到.init.text section中。
    __exit,标记模块退出代码,对非模块无效。
    __initdata,标记内核启动时所用的初始化数据结构,内核启动完成后不再使用。其所修饰的内容被放到.init.data section中。
    __devinit,标记设备初始化所用的代码。
    __devinitdata,标记设备初始化所用的数据结构。
    __devexit,标记设备移除时所用的代码。
    xxx_initcall,7个级别的初始化函数
    ==================================================================================
    driver中的使用:
    module_init, module_exit函数所调用的函数,需要分别用__init和__exit来标记。
    pci_driver数据结构不需要标记。
    probe和remove函数用__devinit和__devexit来标记。
    如果remove使用__devexit标记,则在pci_drvier结构中要用__devexit_p(remove)来引用remove函数。
    如果不确定需不需要添加宏,则不要添加。

    转自:http://blog.chinaunix.net/uid-24807808-id-3127876.html

    转载于:https://www.cnblogs.com/debruyne/p/9288856.html

    展开全文
  • Objective-C语言的 if ( self = [super init] )什么意思? 别和我说: 若要初始化子类就必须初始化父类什么的,书上网上全这么说,我表示这样说我看不懂, 哪位高端娴熟程序员能仔细点给我指导下,谢谢了。 50分...
    nianqing8953  分类:其他编程语言 | 浏览 2112 次
    Objective-C语言的 if ( self = [super init] )什么意思?
    
    别和我说: 若要初始化子类就必须初始化父类什么的,书上网上全是这么说,我表示这样说我看不懂,
    哪位高端娴熟程序员能仔细点给我指导下,谢谢了。   
    50分全部家当,全部送上.
    2012-11-17 23:28 提问者采纳
    我只能说尽力尝试用不晦涩的方式为你解释
    我们先假设现在自己创建了个类,我们起名叫MyObject,继承于NSObject。
    继承知道吧,就是你这个子类(MyObject)如果什么都不写的话,和父类(NSObject)就是一模一样的。
    OC里几乎所有的类的根源都是NSObject,都是在NSObject的基础上增加成员变量、函数。
    父类不是你自己写的类,你不敢保证它是安全的,能否成功初始化,你有可能不知道里面是什么样子的。
    
    self = [super init],你可能对这步做法可能难以理解。self指向了父类初始化的内存地址。类的初始化函数如果失败会返回nil,随后self也为nil。
    那么 if(self = nil),你往下的初始化工作都是对nil做的,初始化失败。
    如果你还想有更深的理解请看下面一段我为你摘抄的:
    父类进行初始化时,用的是子类对象指针self,父类的init方法有可能对这个指针指向的内存区作了大的变更(有可能把这个指针所指的内存释放了,重新分配了另一块内存区域返回来,这时这个返回的指针与原来的指针是指向不同地址的),所以父类初始化后要重新返回指针。父类返回的和子类的self的类型都为id类型(通用类型)。父类的init方法若返回的指针与self不一样,在父类的init方法中已作了release和新的内存分配,不需要自己再去release self,直接用父类init方法返回的指针就可以了。
    
    希望能够帮助你理解,但同时希望你在初期阶段不要钻牛角尖,要快速向前推进。等累积足够的经验以后,回头再来看会更容易理解
    if ( self = [super init] )
    
    {
        只要知道你需要在此你初始化的工作即可
    
    }
    
    return self;
    提问者评价
    谢谢!
    展开全文
  • Python中子类调用父类初始化函数,意思是作为一个新的类(子类)需要做一个初始化的动作,这个动作只所以必要正是因为其一个子类,有父类管着。 就好比野蛮生长的公司,需要什么就搞什么,没有禁忌(不要扣字眼)...

    Python中子类调用父类初始化函数,意思是作为一个新的类(子类)需要做一个初始化的动作,这个动作只所以必要正是因为其是一个子类,有父类管着。

    就好比野蛮生长的公司,需要什么就搞什么,没有禁忌(不要扣字眼);

    但是一个大公司的子公司,就要考量成立的时候要从大公司带哪些人物出来。

    再具体一点,郭子兴起兵,有什么人就用什么人,需要伙夫就找个人做伙夫,需要将军就提拔一个人做将军,草莽绿林;

    朱元璋起兵从郭子兴部带走17名精干之士。这就是子类调用父类完成初始化,并且是子类的实例。

    父类有众多属性,就像郭子兴有几万人马,当子类要独自挑大梁的时候,并不是父类有什么子类就全要,只需要挑出自己需要的17人就够了,这就是初始化。

    郭天叙也是郭子兴的子类,郭子兴有的,他作为少帅也都可以有,但它并没有实例化,因为没有进行自己的初始化,

    Python中父类初始化有两种方式:__init__和super()。

    • 子类直接调用父类的__init__

    class first(object):
        def __init__(self,value):
            self.value = value
    class son_of_first(first):
        def __init__(self):
            first.__init__(self,9)
    
    • 菱形继承

    菱形继承体系: 菱形继承就是子类继承自两个不同的超类,这两个超类有一个公共的基类,形成一个类似竖着的菱形的继承样式,所以叫做菱形继承体系,在顶部顶点的基类会执行多次初始化方法(init):

    在运行过程中,基类多次被初始化,会导致运行过程不连续。

    为解决这种顶层基类被多次调用的困境,Python2之后提供了super()

    • super()

    class suibiandemingzi(first):
        def __init__(self,value):
            super(suibiandemingzi,self).__init__(value)
            self.value += 8
    class diergemingzi(first):
        def __init__(self,value):
            super(diergemingzi,self).__init__(value)
            self.value += 4
    

    此时,顶层基类first就只被调用了一次。

    • __init__与super()形式上的异同

    两者位置都是在子类的def __init__(self, value):

    父类名.__init__(self, 初始化赋值)

    super(子类名, self).__init__(初始化赋值)

    • Reference

    1. 你不知道的 super
    2. Python中阶教程:初始化父类的方法(__init__与super)
    展开全文
  • _init_根据其英文意思(initialize),用来初始化一个类(class)的新成员(instance),它一个constructor. 当新成员被创建时,这个方程会自动被调用。 有个答主对init的功能,解释的很清楚,这里不再重复。单独...
  • 初始化属性name,age"""  self.name = name 理解:self.name = name <p>self.name 一个带前缀self的变量,它可以被类中所有的方法调用,也可以被类的实例访问。self....
  • 3,在想要创建vue项目的目录下打开命令行,输入vue init webpack进行webpack环境的初始化配置  配置过程中 如果不知道是什么意思就全部点回车就好,这里特别提一下,如果不选择npm后期会有一定的麻烦  接下来...
  • 今天刷嵌入式三级题,发现一个 void UART0_Init() 函数中,在初始化 rGPHCON 时, 这样的: rGPHCON = (rGPHCON&0xFFFFFF00) | 0x000000AA; // 端口H相应引脚功能初始化. 展开其实就是将 GPH3[7:6], ...
  • /*************** 这里设置程序初始化时显示的时间 ****************/ #define SET_HOUR 12 /* 设置初始化小时 */ #define SET_MINUTE 00 /* 设置初始化分钟 */ #define SET_SECOND 00 /* 设置...
  • #include using namespace std; typedef enum PointerTag {Link,Thread}; //Link==0,Thread==1;线索 typedef struct treenode { struct treenode *left;...//初始化二叉树 void init_tree(Treep &root) ...”是什么意思
  • GPIO_InitTypeDef GPIO_InitStructure;这句话什么意思

    千次阅读 多人点赞 2020-08-06 12:05:37
    stm32里面初始化GPIO用的。设置完了GPIO_InitStructure里面的内容后 在GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用, 比如初始化pa口,就是 GPIO_Init (GPIOA, &GPIO_...
  • from:http://www.dz-yj.com/bbs/37491.htmlyamaki 发布于 2007-10-26 18:42:00 周立功Startup.s中的ResetInit函数: ResetInit;...初始化外部总线控制器,根据目标板决定配置LDRR0, =PINSEL2IF :DEF...
  • 关于函数def __init()__

    2021-04-18 21:00:36
    init表示初始化init函数,也就是初始化函数,意思就是,当实例化类的时候,自动运行的函数,如果我们实例化的时候给类传了参数,参数也呈交给这个函数来处理的。所以,你可以在init函数里写上任何你希望实例化的...
  • # __init__是什么:就是初始化的 , 初始化就是给初始值的意思 # __init__作用:给对象属性初始值的意思 # 怎么使用 eg ''' class Student: def __init__(self,name,age): self.name = ...
  • 内核中的_init和_exit

    2014-05-16 12:11:12
    们在内核中经常遇到初始化函数是这样定义的: static int...那么,__init是什么意思呢?还有与其匹配的__exit呢? __init* macro __init定义在:include/linux/init.h #define __init __attribute__ ((__secti
  • 产生的新对象 = object.__new__(继承object类的子类)这句话是什么意思??元类是类的类,是类的模板元类是用来控制如何创建类的,正如类是创建对象的模板一样,而元类的主要目的是为了控制类的创建行为类是实例对象...
  • 明显的错误不会有,不明白为什么的真是原因:对象的初始化函数__init__的参数和调用对象函数的输入参数要分开,初始化完对象后,给函数传入参数。 假设有个函数A(age=1),但是我调用这个函数A(3, age=5),此时我们...
  • ARM汇编 Init.s,ldr r13,0x1000

    千次阅读 2013-03-14 20:21:33
    在FL2440裸机试验中,对CPU初始化Init.s文件中总有一句话: ldr r13,=0x10000 这句话到底什么意思?起到什么作用呢? 首先,这里的ldr一个伪指令,这句话的直接含义将0x1000这个数存入r13寄存器中。 ...
  • 这句话的意思是打开Zip文件初始化失败,但是我的APP并没有使用Zip文件,上stackOverflow上查了下,好像有这个问题的人还蛮多,但是都出现在华为的手机上。所以应该不是程序的问题,手机的问题。应该华为手机的...
  • 分辨初始化了self.i, self.j <pre><code> self.i = tf.placeholder(tf.int32, [None,]) # [B] self.j = tf.placeholder(tf.int32, [None,]) # [B] </code></pre> 这个i,j分别是什么含义? ...
  • 程序启动后,通过编译之后,Runtime 会进行初始化,调用_objc_init。 然后会map_images。 接下来调用map_images_nolock。 再然后就是read_images,这个方法会读取所有的类的相关信息。 最后调用...
  • 另外globalCoord是什么意思? 完整代码如下: ``` <!DOCTYPE html> <title>EChartsTest <!-- 引入 echarts.js --> <script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js">...
  • 通过 三大机制 揭秘 IPFS 工作原理

    千次阅读 2018-08-08 04:56:11
    我们知道,ipfs启动之前需要先运行ipfs init初始化什么意思?就是生成该程序的配置信息和初始的数据库,就像一个商店要开张迎业,先要把商店盖好,货物提前采购好,那这些初始化的数据放置在哪里呢?位于每个用户...
  • python为什么我继承了Threading的Thread方法, class myThread(threading.Thread): def __init__(self,threadname): threading.Thread.__init__(self,name=threadname) 这就是问题为...python这样写是什么意思
  • Jsp页面生命周期

    2019-09-26 01:17:21
    该servelt始终驻于内存??这句话不是很理解。... 看servelt的生命周期时,理解了这句话,servelt要先创建一个实例,实例init初始化,然后根据请求去调用service(),服务器停止时调用destory(...
  • <ul><li>init - 自动化初始化配置文件</li><li>dev - 启动dev-server,hot-reload,http-proxy 等辅助开发</li><li>deploy - 编译源码,静态文件上传cdn,生成html,发布上线</li></...
  • #git初始化 git init #设置remote地址 git remote add origin 地址 #获取远程仓库master分支上的内容 git pull origin master #将当前分支设置为远程仓库的master分支 git branch --set-upstream-to=origin/master ...
  • 2021-04-01 12:04:50
    初始化函数中,self后面的事实例化对象的属性,加下划线的意思是,代表这个属性私有的,不应该访问。 Pass代表什么都不做,只是占个位而已。 >>> class Person: def __init__(self,name,age): self...
  • git 如何使用(教人)

    2020-06-27 23:31:01
    1.什么是git Git 一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理 ...3.github就是一个仓库 咱们使用git技术 把代码存储到github上 ...首先 git init 初始化 git config --global use
  • git如何使用

    2020-06-27 23:40:31
    1.什么是git Git 一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理 ...3.github就是一个仓库 咱们使用git技术 把代码存储到github上 ...首先 git init 初始化 git config --global use

空空如也

空空如也

1 2 3 4 5
收藏数 100
精华内容 40
关键字:

init初始化是什么意思