首页
学习
活动
专区
工具
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.6K20

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

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

48710

python基础六

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

59330

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

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

57220

从函数到Python代码层次

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

60820

Java学习笔记【持续更新】

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

1.2K50

送给小白 7 个 python 小坑

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

61520

【Java SE】对象

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

41420

深入理解static关键字

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

24020

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

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

17330

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

Python基础学习笔记

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

1.2K50

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、方法重写 如果你方法功能不能满足你需求,你可以在子类重写你父方法: 实例: #!

83200

Python教程第6章 | Python面向对象

多态 它是指对不同类型变量进行相同操作,它会根据对象(或)类型不同表现出不同行为。...除此之外,在这里,还要强调一个概念,当你把实例化之后,里面的属性和方法,就不叫类属性和方法了,改为叫实例属性和实例方法,也可以对象属性和对象方法。 为什么要这样强调?...那么相反,如果实例属性改变了,类属性会改变吗? 答案当然是不能啦。因为每个实例都是单独个体,不能影响到。 具体我们做下实验: 可以看到,不管实例对象怎么修改属性值,对属性还是没有影响。...在内部方法中使用时 self.__private_attrs。 为什么只能说一般情况下? 因为实际上, Python 是没有提供私有属性等功能。...但是 Python 对属性访问控制是靠程序员自觉为什么这么说? 看看下面的示例: 仔细看图片,为什么说双下划线不是真正私有属性

17810

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

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

1.4K30

Python从入门到精通,这篇文章为你列出了25个关键技术点(附代码)

为什么选择 Python (优势) Python 是当前最流行语言,因为它更容易编码且具有很强可解释性。 Python 是一种面向对象编程语言,也可用于编写一些功能代码。...PYTHONHOME 是一个用于搜索该路径模块。 如何导入模块 如果你有一个文件:MyFirstPythonFile 包含很多个函数,变量对象,然后你可以将这些功能导入到其他,如下所示。 ?...面向对象设计允许程序员根据自身所需属性和功能自定义创建对象。 属性也可以引用另一个对象Python 可以引用其他Python 支持封装 -- 实例函数和变量。...深拷贝将对对象进行新引用。 17 面向对象设计——继承 Python支持对象继承,即对象可以继承其父功能和属性。 继承可以在其函数包含不同逻辑。...18 垃圾收集——内存管理 Python 所有对象都存储在一个堆积空间 (heap space), Python 解释器可以访问此空间。 Python 有一个内置垃圾收集机制。

2.9K20

【全网力荐】堪称最易学Python基础入门教程

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

2.9K10

Java基础深入解析——对象

构造函数只能在对象初始化时候给对象成员变量进行一次赋值,创建完对象之后就不能再赋值了;若今后需要修改对象成员变量,就需要用set方法。 9.能否在成员函数调用构造函数? 不行!...成员变量随着对象产生产生,随着对象消失消失。 b)  调用方式不一样。 成员变量只能被对象调用; 静态变量可以对象调用,又可以名调用。 c)  别名不一样。...6.静态代码块 1.定义 static{} 2.作用 随着创建执行,而且就在被创建时候执行一次。 用于给全是静态成员进行初始化值。...2.被protected修饰,能被本访问,不能被其他访问,但被protected修饰子类在其他,这些子类可以访问父。...“jar  -cf  文件名.jar  需要放入jar名” 为什么要把项目打包成Jar文件? Jar实质上给项目又多加了一层目录,而且Jar无需解压可以直接调用里面的

82470
领券