首页
学习
活动
专区
工具
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修饰),它不能直接访问同一个非静态成员

50210
  • python基础六

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

    61430

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

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

    60220

    从函数到Python代码层次

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

    63320

    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__。

    63820

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

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

    14510

    【Java SE】对象

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

    43520

    Java学习【对象—封装】

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

    8810

    深入理解static关键字

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

    33220

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

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

    20330

    python

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

    1K30

    Java之static作用全方位总结

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

    1.6K21

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

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

    10010

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

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

    8610

    Python基础学习笔记

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

    1.3K50

    python之模块和

    from可以对模块属性和方法内容进行导入操作 但其本质上还是将from中指定模块全部都进行了初始化和加载操作 ? ? 3 as 字句使用 ?...: 1 能够更好组织模块,尤其是大规模代码很多,可以拆分成很多子模块,便于使用某些功能就加载相应子目录 ---- 目录_init_.py是包在第一次导入时就执行,内容可以为空,也可以用于初始化工作代码...import * 方式导入,使用简短,其副作用是会导入大量不需要使用环境变量,甚至造成名称冲突,_all_ 可以控制被导入模块在这种导入方式下能够提供变量名称,就是为了阻止from ......,哪怕是导入子模块,或者导入下划线开头名称,程序员可以有控制和导入名称和其对应对象 7 模块变量修改 w1 _init_.py定义一个参数z ?...,修改模块变量,函数等内容 五 包管理 1 为什么要使用包管理 python 模块或者源文件直接可以复制到项目中,便可以导入使用了,但为了更多项目的调用和使用,或者共享给别人,就需要进行打包

    1.4K10

    python学习和使用

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

    88100

    万字长文爆肝Python基础入门【巨详细,一学就会】

    raise 语句主动抛出异常 总结 定制一个模子—— 查看数据类型 定义 实例对象属性 对象方法 总结 更大代码盒子——模块和 什么是模块 模块导入 执行模块时传入参数 什么是...实例化 我们把看作是自定义数据类型,既然是类型,那么它只能用来表示数据种类,不能直接用于保存数据。...定义好以后,可以像这样实例对象变量 = 名() 通过 名() 这样类似函数调用方式生成出对象,并将对象赋值给 变量。...和之前相比内部多了一个函数 __init__(),__init__() 函数一方面可以接收要保存在对象数据,另一方面也可以实例时候做一些初始化工作。 我们通过实际例子来学习。...可以在 __init__ 方法定义对象属性,之后在实例时候传入数据。

    1.6K30
    领券