当前位置:首页 » 编程语言 » python类init方法

python类init方法

发布时间: 2023-12-24 12:26:05

python init和new的区别

类里面的__init__()方法是在类被实例化是自动调用的方法,可以在里面进行一些初始化操作

⑵ python中的__init__(self)是什么意思呢

Python中,__init__()方法是所谓的对象的“构造函数”,负责在对象初始化时进行一系列的构建操作

假设有如下类:

classworker:
pass

在Python中,对某个类实例进行成员赋值,可以创建不存在的成员:

>>>a=worker()
>>>a.pay=55000
>>>a.name='Bob'

如果对于每一个worker类的实例对象,都要进行如此赋值的话,这个类会变得很难使用

另外,对于用于特殊场合的类,可能要求在对象创建时,进行连接数据库、连接FTP服务器、进行API验证等操作,这些初始化操作,都可以封装在__init__()方法中进行


__init__方法使用如下规则定义:

classex:
def__init__(self):
pass

__init__方法必须接受至少一个参数即self,Python中,self是指向该对象本身的一个引用,通过在类的内部使用self变量,类中的方法可以访问自己的成员变量,简单来说,self.varname的意义为”访问该对象的varname属性“

当然,__init__()中可以封装任意的程序逻辑,这是允许的,__init__()方法还接受任意多个其他参数,允许在初始化时提供一些数据,例如,对于刚刚的worker类,可以这样写:

classworker:
def__init__(self,name,pay):
self.name=name
self.pay=pay

这样,在创建worker类的对象时,必须提供name和pay两个参数:

>>>b=worker('Jim',5000)

Python会自动调用worker.__init__()方法,并传递参数。


通常情况下,self形参由Python自动赋值,但是,在类继承中,并不是这样

例如,Python的HTML处理工具HTMLParser,是一个基于OOP模型的工具,要使用该工具,必须编写一个类,继承html.parser.HTMLParser类,并重载一系列方法,以定制自己的功能

fromhtml.parser.HTMLParser

classex2(HTMLParser):
def__init__(self):
HTMLParser.__init__(self)

此处,需要调用了HTMLParser类的__init__方法,而且,此处手动给HTMLParser.__init__()方法的self形参赋值,事实上,如果不显式指定self形参的值,Python不会在此处自动为HTMLParser.__init__()方法的self形参进行赋值

如此设计的原因是,在子类中需要获得超类的成员和方法,而通过在子类的__init__方法中调用超类的__init__方法,并手动给它传递指向子类的self值,可以使超类的__init__方法将所初始化的变量设置成子类的变量,这样,就可以在子类中直接访问超类的变量了。

⑶ python的初始化方法有什么用

1.
在程序执行时一定执行一次的操作

2.
python中初始化init 参数第一个必须要加 self

3.
对变量进行赋值 继承: 子类继承父类

⑷ __init__ 为什么python类需要初始化

通常构造一个类,用 init 初始化:

为什么python类需要初始化
1.python 类初始化属性 def __init__() 中定义,实例化对象后可直接调用
2.python 类非初始化属性在 def func() 中定义,实例化对象后, 先调用调用函数,再调用属性

结果:

⑸ python中init方法无法初始化,请大神赐教

首先你要明白类的三大特性,封装,继承,多态。你这个主要是封装得应用。实际图二也是错误的,无法获得url的值。图一的稍微改下就对了。
def __init__( self,url):
self. url= url
这样在对类引用的时候给url赋值就行了

⑹ python的init中的self问题具体是什么

__init__()是类的构造函数,在建立对象时调用。self是对“对象”自身的引用。相当于c++中的this。



python规定:访问类成员时,需要在前面加上this。这里,this.name = name表示为Person类添加了属性name。



如果变量前不加this,则视为局部变量。这个变量会在方法运行结束后失效。而属性在整个类的范围内都是有效的。

⑺ 详解Python中的__new__、__init__、__call__三个特殊方法

__new__: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self)
__init__ : 对象的旦胡初始化, 是一个实例方法,第一个参数是self。
__call__ : 对象可call,注意不是类,是对象。

先有创建,才有初始化。即先__new__,而后__init__。
上面说的不好理解,看例子。

1.对于__new__

可以看到,输出来是一个Bar对象。

__new__方法在类定义中不是必须写的,如果没定义,默认会调用object.__new__去创建一个对象。如果定义了,就是override,可以custom创建对象的行为。
聪明的读者可能想到,既然__new__可以custom对象的创建,那我在这里做一下手脚,每次创建对象都返回同一个,那不就是单例模式了吗?没错,就是这样。可以观摩《飘逸的模培拦python - 单例中返模式乱弹》
定义单例模式时,因为自定义的__new__重载了父类的__new__,所以要自己显式调用父类的__new__,即object.__new__(cls, *args, **kwargs),或者用super()。,不然就不是extend原来的实例了,而是替换原来的实例。

2.对于__init__

使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。例如:

这样便是__init__最普通的用法了。但__init__其实不是实例化一个类的时候第一个被调用 的方法。当使用 Persion(name, age) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 __new__ 方法。

3.对于__call__
对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2) 。模拟函数的对象可以用于创建防函数(functor) 或代理(proxy).

总结,在Python中,类的行为就是这样,__new__、__init__、__call__等方法不是必须写的,会默认调用,如果自己定义了,就是override,可以custom。既然override了,通常也会显式调用进行补偿以达到extend的目的。
这也是为什么会出现"明明定义def _init__(self, *args, **kwargs),对象怎么不进行初始化"这种看起来诡异的行为。(注,这里_init__少写了个下划线,因为__init__不是必须写的,所以这里不会报错,而是当做一个新的方法_init__)

⑻ python init函数

问:对于python中的初始化init这个怎么理解啊?

答:相当于类的构造函数,用来初始化变量等。


问: param = self._args['receiving'].replace("\'", "'")这一句是啥意思啊?还有addReceiving(self)中self到底是什么啊?

答:在对class进行调用的过程中,会首先执行__init__这个构造函数,可以看到在构造函数中,对_args进行了赋值,在python中"_"一般代表这个参数是private的。


问:我的理解是args是LogisticsService类的一个属性,addReceiving(self)方法中的参数self就是LogisticsService类中的args。求大神指导!!

答:大神来了,args是一个字典类型,是LogisticsService的在init初始化的一个字段。


大神做到底,再给你个示例,你琢磨一下

⑼ 关于python的实例方法问题

题主你好,

python中创建新实例的时候, 如果相应的类中定义了__init__()方法的话, 会自动调用这个方法. 你可能认为名称"init"和"__init__"差不多, 但计算机其实是个很笨的东西, 它会完全按照设计去执行. 也就是说,在设计的时候就已经定死了, 默认情况下, 创建新实例的时候, 会自动调用类中定义的__init__()方法, 只要你的方法名和__init__有一点不一样也不行.

下图是我在官网上找的关于__init__()调用的简单说明:

高亮部分说的大概意思就是上面讲的,如果相应类中定义了__init__()方法,则在创建该类实例的时候会自动调用里面定义的__init__()方法.

-----

希望可以帮到题主, 欢迎追问.

热点内容
学校考试服务器地址 发布:2024-11-30 10:35:30 浏览:683
nas无盘服务器搭建教程 发布:2024-11-30 10:27:07 浏览:156
触摸精灵脚本解密 发布:2024-11-30 10:27:04 浏览:328
如何解锁密码锁上的密码用数字解 发布:2024-11-30 10:07:55 浏览:454
文件夹选项怎么找 发布:2024-11-30 10:05:50 浏览:378
安卓手机界面下面返回键怎么设置 发布:2024-11-30 09:59:12 浏览:65
名ftp是 发布:2024-11-30 09:59:12 浏览:294
用户上传伴奏 发布:2024-11-30 09:35:33 浏览:264
sql服务器配置失败 发布:2024-11-30 09:35:21 浏览:911
php从传智播客 发布:2024-11-30 09:33:47 浏览:966