首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Python类初始化变量不能用于包导入中的类实例对象,而可以呢?

Python类初始化变量不能用于包导入中的类实例对象,而可以的原因是因为导入包时,解释器会先执行包内的init.py文件,而不会实例化包内的类。

在Python中,当导入一个包时,解释器会自动执行该包下的init.py文件。这个文件可以包含一些初始化代码,用于设置包的环境和变量。在执行这个文件时,解释器会将其中的代码逐行执行,但不会实例化包内的类。

而类的初始化变量是在类实例化时执行的,用于初始化类的实例对象的属性。当我们导入一个包时,并不会实例化包内的类,因此类的初始化变量不会被执行。

举个例子,假设有一个包名为"my_package",其中包含一个模块"my_module",以及一个类"MyClass"。在包的init.py文件中,我们定义了一个初始化变量"my_variable",并赋值为10。在模块"my_module"中,我们定义了一个类"MyClass",并在初始化方法中使用了"my_variable"。

当我们导入这个包时,解释器会先执行包的init.py文件,将"my_variable"赋值为10。然后,我们可以通过"my_package.my_module.MyClass()"来实例化这个类,此时初始化方法会被执行,并使用到了"my_variable"的值。

总结起来,Python类初始化变量不能用于包导入中的类实例对象,是因为导入包时解释器只会执行包的init.py文件,而不会实例化包内的类。而类的初始化变量是在类实例化时执行的,用于初始化类的实例对象的属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python面向对象中的类变量,实例变量怎么来理解?

一、前言 前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个类变量和实例变量的问题,这里拿出来给大家分享下,一起学习下。...二、解决过程 在Python Tutorial中对于类变量和实例变量是这样描述的: Generally speaking, instance variables are for data unique...通常来说,实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法。...b print(self.A+self.B/2+1) Calculate(4,10) 这个代码输出的结果是31.0,因为self是指向类本身,所以在init外定义A,B可以用self.A...这篇文章主要分享了Python面向对象中的类变量,实例变量的问题,给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。

1.7K20

关于JAVA你必须知道的那些事(二):封装

而面向对象就是人在关注对象, 关注事物的信息。那什么是类?类就是模子,通常用于确定对象将会拥有的特征(属性)和行为(方法)。也就是说对象是类的具体存在,而类则是对象的抽象化。...而实例化对象则是在堆空间开辟一块空间,它完成了具体对象相关信息的初始化操作。最后通过赋值进行两者绑定。 也就是声明对象和实例化对象是在内存中的不同空间完成的,通过赋值操作,将两者关联。...因为已经实现了封装,因此我们在实例化对象的时候就不需要再次传入自定义的参数了,否则就没有使我们提供的setter方法生效了。 包的管理 为什么要说包的管理呢?...如果它修饰初始化块,那么该初始化块被称为静态初始化块。 但是static是不能修饰类,不能修饰局部变量,不能内部类中修饰初始化块(不可以在内部类定义静态初始化块)。...static访问 普通的成员方法可以直接访问当前对象(该类实例化的对象)的成员属性和方法,也可以直接访问当前对象的静态属性和静态方法 静态方法或者类方法(前面被static修饰),它不能直接访问同一个类中的非静态成员

50810
  • python基础六

    注意:我们导入模块时,会现在本地文件中查找该模块,再去系统变量中查找也就是说如果我们将本地py文件的命名修改成上篇文章的任意一个,再去使用它就会报错。 如果我想要调用Test中的Getstr方法呢?...我们经常看见 from xxx.xxx.xxx import xxx .的左边必须是包,也就是文件夹,导入其他文件夹下的py文件,import后不能有点 同时也可以一次导入多个: from Test import...:映射中没有这个键 MemoryError:内存溢出错误(对于Python 解释器不是致命的) NameError:未声明/初始化对象 (没有属性) UnboundLocalError:访问未初始化的本地变量...self: self变量,可以看作包含所有属性的字典 *args:参数 实例化的参数会在__init__中接收 类是抽象的,他只负责定义一些属性和功能,经过实例化之后变成对象。...反过来 import 一个模块的过程就是一个实例化的过程 另:类是可以当作一个属性传入到另一个类中的。 面向对象之封装,继承,多态 继承:#为什么继承?

    62230

    【Javase-9.类和对象】

    一个类可以实例化出多个对象, 实例化出的对象 占用实际的物理空间,存储类成员变量 4. 做个比方。...每次对象创建好后调用 SetDate 方法设置具体日期,比较麻烦,那对象该如何初始化? 2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?...,并没有给初始值, 为什么就可以使用呢?...静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用 7.3static成员变量初始化 注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性...也叫: 实例代码块 。 构造代码块一般用于初始化实例成员变量 。

    4810

    Python入门(四):函数、类、模块

    ; 关键字参数,可以用name=value的形式调用函数,并且顺序可以换; 传不可变对象string、tuple,数据不能被改变;传可变对象list、dict、set,数据可以被改变。...函数返回值 可以用return返回函数的计算结果; 可以用逗号分隔返回多个值,调用时拆包获取各值; 函数内变量的作用域 函数中定义的变量在函数外是不能使用的; 函数外面的变量是全局变量,可以读取,但是如果要更改...二、类 类一般是名词,代表一类事物,比如学生、汽车、电脑; 类定义了一个模板,一个类可以有多个实例对象,每个实例对象有自己的具体的属性取值; 类是包含数据和方法的一个打包,其中的方法可以对数据进行更新;...)# 访问实例的属性print(s1.name, s1.age)# 调用实例的方法s1.set_grade(100) 实例演示: 需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支持计算各科平均分最高分...创建两个类:类1:学生成绩表 SgradeTable---需求文档中的名词属性: 学生成绩表:list(Sgrade)---需求文档中的数据方法:导入成绩表文件-----需求文档中的动词计算各科的平均分

    62220

    从函数到包的Python代码层次

    那么问题来了,这是写在哪里的呢?为了一目了然,我们用“导游图”的视角来看看代码层次: ? 红色箭头指出了,是写在模块中的,原来一个.py文件就是一个模块。模块中可以写函数和类,模块可以放在包中。...这个问题有点大,我只能简单解释一下,那就是因为,类是包括了函数的,如果有一天你发现函数不够用了,那么可以用类试试,哈哈哈。 类是面向对象编程中的概念,把对象中共性的东西抽离出来而成。...模块 模块中可以包含模块级代码、函数和类。模块与模块之间是不能直接调用的,必须使用import关键字来导入。...包 包是一个目录,特殊的地方在于需要包含一个__init__.py文件(内容可以为空),这是为什么呢?...内置:Python内置的名字。 全局:模块中定义的名字,包括模块的函数、类、其他导入的模块、模块级的变量和常量。 局部:函数中定义的名字,包括函数的参数和局部定义的变量。

    63520

    Java学习笔记【持续更新】

    在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中 构造函数可以有多个,用于对不同的对象进行针对性的初始化 多个构造函数在类中是以重载的形式来体现的 当成员变量和局部变量重名,可以用关键字...,对象中的存储是特有数据 成员变量与静态变量的区别: 1.两个变量的生命周期不同 成员变量随着对象的创建而存在,随着对象的回收而释放 静态变量随着类的加载而存在,随着类的消失而消失 2.调用方式不同:...但是非静态需要被对象调用,而仅创建对象调用非静态的 没有访问特有数据的方法,该对象的创建是没有意义的 静态代码块: 随着类的加载而执行,而且只执行一次 作用: 用于给类进行初始化 构造代码块:、 可以给所有对象进行初始化...原因是,在子类的构造函数中第一行有一个默认的隐式语句:super() 子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数 为什么子类实例化的时候要访问父类中的构造函数呢?...这类必须也被abstract修饰 2.抽象类不可以被实例化,为什么呢?

    1.3K50

    送给小白的 7 个 python 小坑

    在Python中,类变量在内部作为字典处理,并遵循通常称为方法解析顺序(MRO)的方法。...4. python闭包变量绑定 python的闭包变量问题也是新手们容易混淆的一个点,来看看下面的例子: def create_multipliers(): return [lambda x :...例如导入另一个库,而这个库又会尝试导入模块的Python标准库版本,但由于你有一个同名的模块,另一个包会错误地导入你的版本而不是Python标准库。...在 Python 中会用到对象之间比较,可以用 ==,也可以用 is,但对对象比较判断的内容并不相同,区别在哪里?...__init__(a, hello ) 即__init__作用是初始化已实例化后的对象。 其次,子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__。

    64220

    【Java 基础】类和对象(构造&this&封装&static&代码块)

    (也就是下面将会提到包的概念) 4. 封装 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?我们该文中主要讲到的就是 封装 这一概念。...包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。 导入包中的类 使用 import语句导入包....可以使用import static导入包中静态的方法和字段 /*import java.util.*; 表示只要是 util下的所有类都可以适配 ,但是我们更建议显式的指定要导入的类名....注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。...也叫:实例代码块。构造代码块一般用于初始化实例成员变量。注:构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。

    15410

    【Java SE】类和对象

    用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。 new 关键字用于创建一个对象的实例. 使用 . 来访问对象中的属性和方法....一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量 做个比方。...(即:随类的加载而创建,随类的卸载而销毁) 那static属性应该如何访问呢?...【静态方法特性】 不属于某个具体的对象,是类方法 可以通过对象调用,也可以通过**类名.静态方法名(…)**方式调用,更推荐使用后者 不能在静态方法中访问任何非静态成员变量 静态方法中不能调用任何非静态方法...构造代码块一般用于初始化实例成员变量。 8.4 静态代码块 使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

    44320

    Java学习【类与对象—封装】

    其实System.out也是静态方法 那么也可以类似的进行静态导入 不过以上方法并不常用 static关键字的使用 static修饰符用于声明类的静态成员,包括静态变量(也称为类变量)和静态方法...当static修饰一个成员变量时,这个变量就变成了类级别的一个属性,而不是实例级别的。...,并且存放在方法区当中,而对象是存在于堆内存中的 那么既然不属于对象了,怎么去访问呢 仍然可以通过对象名访问,但是并不推荐这种写法,因为static修饰的成员变量已经和对象没有关系了,推荐使用类名进行访问...this关键字 2.静态方法中不能调用非静态的变量和方法 3.非静态方法可以使用静态方法或变量 静态成员变量的初始化 就地初始化 static int a = 1; 通过get set 方法初始化...它们定义在类中但在任何方法之外。当创建类的实例时,这些代码块会被执行,且每次创建新实例时都会执行。它们通常用于初始化实例变量。

    9710

    《JavaSE-第七章》之抽象的类-实例的对象-合理的封装

    注意事项 new 关键字用于创建一个对象的实例 使用 . 来访问对象中的属性和方法. 同一个类可以创建对个实例. 类和对象的说明 类是对一类事物的描述,是抽象的,概念上的定义。...(类的具体) 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图。...局部变量必须要初始化才能使用,为什局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用? 构造方法 在java中,有一种特殊的方法被称为构造方法,也被称为构造器等。...eatApple();可调用多次,并且我们还可以继续调用,这是件神奇的事情,这是为什么呢?...成员变量和局部变量的区别 区别 成员变量 局部变量 类中的位置不同 类中,方法外 常见于方法中 初始化不同 有默认的初始化值 没有,使用前必须初始化 内存位置不同 堆内存 栈区 生命周期不同 随着对象的创建的而存在

    21230

    深入理解static关键字

    什么意思呢?这其实就是说,static 关键字只能定义在类的 {} 中,而不能定义在任何方法中。 就算把方法中的 static 关键字去掉也是一样的。...); } } } # 1.5 静态导包 不知道你注意到这种现象没有,比如你使用了 java.util 内的工具类时,你需要导入 java.util 包,才能使用其内部的工具类...,如下 但是还有一种导包方式是使用 静态导包 ,静态导入就是使用 import static 用来导入某个类或者某个包中的静态方法或者静态变量。....属性名/方法名 ,而实例变量和局部变量都是属于具体的对象实例。...# 2.5 类加载顺序 我们前面提到了类加载顺序这么一个概念,static 修饰的变量和静态代码块在使用前已经被初始化好了,类的初始化顺序依次是 加载父类的静态字段 -> 父类的静态代码块 -> 子类静态字段

    34620

    python 类

    类 用来描述具有相同的属性和方法的对象的集合。python中的类就是对象。...,用于初始化变量等操作 每当创建新实例时,Python都会自动运行它 init()中的形参self必不可少,还必须位于其他形参的前面。...实例化对象的时候,调用init()初始化之前,先调用了new()方法,new()必须要有返回值,返回实例化出来的实例,可以直接将object的new()出来的实例返回。...如果类比作制造商,new()方法就是前期的原材料购买环节,init()方法就是在有原材料的基础上,加工,初始化商品环节。 类变量和实例变量 类变量就是供类使用的变量,实例变量就是供实例使用的.....对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是foo(self, x),为什么要这么做呢?

    1.1K30

    【Java面向对象三大特征——封装】

    静态的成员变量随着类被加而创建,随着类被销毁而销毁 ⚠️此外注意,静态的只能是成员变量,即在类内方法外的变量,static不能修饰局部变量。...与对象无关,和方法逻辑有关 依赖对象,每个对象创建时执行 是否可以访问实例变量 不能直接访问实例变量,只能访问静态变量 可以访问方法范围内的变量 可以访问实例变量和静态变量 执行次数 只执行一次 由方法调用次数决定...每创建一个对象执行一次 典型用途 初始化静态变量、注册驱动等 在方法内部处理逻辑 初始化实例变量 根据上面的代码我们可知,一个类中可以包含多个静态代码块,在编译代码时,编译会根据定义的先后顺序依次执行...通过重写我们可以将对应的属性值打印出来 因为static修饰的是类变量,类变量是公共的,只能通过类去访问,而不能通过对象去访问,所以编译会发生报错。...如果没有static修饰,当j调用这个方法的时候,就会打印出1。 在Java中我们不能import导入指定的包,我们只能导入指定的类或者是通配符,如第二行import语句那样会导致报错。

    12910

    Java之static作用的全方位总结

    并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。   ...变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本【存放在方法区】,它当且仅当在类初次加载时会被初始化【加final和不加final的static变量初始化的位置不一样... 静态导包就是java包的静态导入,用import static代替import静态导入包是JDK1.5中的新特性。...在这里永远要记住一点:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。 3.static能作用于局部变量么?   ...而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person(),而Person类还没有被加载过,因此会先加载Person类并执行Person

    1.6K21

    知识改变命运 第八集(下):Java中的类和对象

    封装 6.1 封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。...只能在Computer类中访问,不能被其他类访问 } } 6.3 封装扩展之包 6.3.1 包的概念 在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件...注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。...也叫:实例代码块。构造代码块一般用于初始化实例成员变量。...一般用于初始化静态成员变量。

    8810

    Python基础学习笔记

    面向对象的三个基本要素是 封装 继承 多态 一个特殊的属性 能够知道这个对象的class 类在程序里面也是一个对象 称为类对象 由类创建出的对象为实例对象 实例对象的属性为实例属性 实例属性和对象有关系...类对象中的属性为类属性 类属性和类有关系 类属性是共享的 实例属性:和具体的某个实例对象有关系 并且 一个实例对象和另外一个实例对象是不共享属性的 类属性:类属性所属于类对象 并且多个实例对象之间共享同一个...__init__(刚刚创建出来的对象的引用) 初始化 3.返回对象的引用 而构造方法是既创建对象 又初始化 和__init__方法不等价 __new__只负责创建对象 __init__只负责初始化.../或者类名也行] 定义的作用:放上将来你想要用的功能/类名,如果没放进去 调用import仍不能用 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功.../或者类名也行] 再通过from 模块名 import * 通用写法是:from . import 模块名 这样就可以调用包中那些模块功能了 #如果导入这个模块的方式是 from 模块名 import

    1.3K50

    python的学习和使用

    在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。...__init__.py的作用 每个目录下都有__init__.py文件,这个是初始化模块,from-import语句导入子包时需要它,可以在里面做一些初始化工作,也可以是空文件。...多线程 Python中的多线程是伪线程;不能充分利用cpu中的多核,但是在io等待型的场景下多线程还是可以提高效率 Python中的多线程有多种实现方式,利用threading包实现是比较普遍的做法 示例代码如下...第一个方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法 类的方法 使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数...3、方法重写 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法: 实例: #!

    91300
    领券