python类、模块的初始化——__init__

1.类中的__init__

__ init __ 为类的初始化函数,当声明类后,要有__init__对类进行初始化。

可以有如下两种方式

class test:
    def __init__(self):
        self.name = None
class test:
    def __init__(self,name):
        self.name = name

当使用类的时候,会自动调用__init __函数,运行其内容。

如以下,定义类

class test(object):
    def __init__(self,score):
        self.score=score
        self.rank=self.getrank()
        self.grand=self.getgrand()
    def getrank(self):
        rank=self.score/10
        return rank
    def getgrand(self):
        if self.score >= 80:
            return "A"
        elif self.score >= 70:
            return "B"
        else:
            return "C"`在这里插入代码片`

当定义类test后,.score为输入值

a=ts.test(80)

自动运行内容,生成test.rank和test.grand。

a.rank
8.0

a.getrank()
8.0
2.模块中的__init__

python的包有不同的结构层次,在调用包的时候,经常需要__init__对于包进行初始化。

当使用import后,会对于文件夹下的内容进行自动运行,最常用的情况是__init__设置为空白。模块ecog结构如下:

–ecog
|-__ init__.py -----------(1)
|-units.py
|-addtest
||-__ init__.py ----------(2)
||-analysis.py

在结构中有两个__init__文件,我们先考虑前一个。

(1)
1. 基本性质

ecog模块的初始化函数,当为空白文件时,import后,不可直接调用内部模块units。如下;

import ecog
ecog.units

输出为

AttributeError: 'module' object has no attribute 'units'

对应的需要分别导入

import ecog.units

可以得到对应模块

 <module 'ecog.units' from '/home/sunkj/anaconda3/envs/python27/lib/python2.7/site-packages/ecog/units.pyc'>

对于文件,在没有__init__.py的情况下,无法导入,当有(2)的__init__.py文件时,不需导入即可调用。

import ecog

ecog.addtest
<module 'ecog.addtest' from '/home/sunkj/anaconda3/envs/python27/lib/python2.7/site-packages/ecog/addtest/__init__.py'>
2. 进阶操作

可以在__init__.py中加入一些语句,在调用时即可运行这些语句,可以便于更方便的进行其中的包的调用。

如,在(1)里加入,

import units

即可跳过指定的导入

import ecog

ecog.units
 <module 'ecog.units' from '/home/sunkj/anaconda3/envs/python27/lib/python2.7/site-packages/ecog/units.pyc'>

如果直接在 __init__.py中加入特定函数,(可用from x import *)

from units import test_LME

即可直接完成对于指定函数的初始化:

import ecog

ecog.test_LME
<function ecog.units.test_LME>

在此情况下,也使用getattr可有更多简便的操作,

getattr(ecog,'test_LME')

 <function ecog.units.test_LME>

getatter用于差找后一个属性是不是存在于前一个模块当中,并进行赋值,这种方法可用于对于文件夹中有多种操作的调用。

附:

__all__也可用于初始化,写在__init__.py函数当中,此时进行默认导入的时候可以只将__all__里的元素导入。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,初始化方法__init__是一个特殊的方法,它用于初始化一个的实例对象。当我们创建一个的实例时,Python会自动调用__init__方法,并将实例对象作为self参数传递给__init__方法。 在__init__方法中,我们通常会对实例对象的属性进行初始化,以便在后续的方法中可以使用这些属性。例如,我们可以在__init__方法中为对象设置初始状态、初始化属性、创建对象的内部状态等。__init__方法通常不返回任何值。 下面是一个使用__init__方法的示例,我们定义了一个名为Person的,并在__init__方法中为实例对象设置了name和age两个属性: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def say_hi(self): print('Hello, my name is', self.name, 'and I am', self.age, 'years old.') p = Person('Tom', 25) p.say_hi() ``` 在上面的代码中,我们定义了一个Person,并在__init__方法中为实例对象设置了name和age两个属性。在say_hi方法中,我们通过self.name和self.age访问了对象的name和age属性,并将它们打印出来。当我们创建一个名为Tom、年龄为25的Person实例时,Python会自动调用__init__方法,并将实例对象作为self参数传递给__init__方法,然后在__init__方法中为实例对象设置name和age属性。 需要注意的是,__init__方法是一个可选的方法,如果我们不定义该方法,则Python会使用默认的__init__方法。默认的__init__方法不会做任何事情,只是将实例对象创建出来。但是,在实际开发中,我们通常会定义__init__方法来初始化实例对象的属性,以便后续方法可以使用这些属性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值