python中def _init_是什么意思_python中的__init__(self)是什么意思呢

__init__(self)这个时类的初始化函数

classObj:def __init__(self):print 1obj= Obj() #这时候__init__这个函数会被调用,self指obj这个对象。

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.HTMLParserclassex2(HTMLParser):def __init__(self):

HTMLParser.__init__(self)

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,`def __init__(self):`是定义类的构造函数(initializer)的方式之一。构造函数是在创建一个类的实例时被调用的方法,用于初始化对象的属性。 构造函数通常会使用`self`作为第一个参数,表示实例本身。通过`self`可以访问并操作实例的属性。在构造函数,可以使用`self.属性名 = 初始值`的方式给实例的属性赋初值。 然而,在Python,也可以使用其他参数来定义构造函数,在函数定义指定这些参数即可。这种方式可以在创建类的实例时直接传入初始值,而不需要在构造函数内部进行赋值操作。 举个例子,考虑以下两种定义`__init__`方法的方式: 方式一: ```python class Person: def __init__(self): self.name = None self.gender = None self.age = None ``` 方式二: ```python class Person: def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age ``` 在方式一,构造函数没有接收任何参数,而是在函数体内部通过`self`给实例的属性赋初值。在创建`Person`类的实例时,可以先创建一个空的实例,然后逐个给属性赋值。 在方式二,构造函数接收三个参数,这些参数分别用于初始化实例的`name`、`gender`和`age`属性。在创建`Person`类的实例时,需要传入这三个参数的值,以便对属性进行初始化。 所以,`def __init__(self, name, gender, age):`是一种更灵活的构造函数定义方式,可以直接在创建实例时传入初始值,避免了在构造函数内部逐个赋值的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值