# declare our own string class
class String:
# magic method to initiate object
def __init__(self, string):
self.string = string
# print our string object
def __repr__(self):
return self.string
def __add__(self, other):
return self.string + other
if __name__ == '__main__':
# object creation
string1 = String('Hello') # Call Class with __init__ Function
# print object location
print(string1)
# concatenate String object and a string
print(string1 + ' Geeks')
<__main__.String object at 0x10ece8850>
Hello Geeks
Hello
Hello Geeks
__init__.py 文件的作用是将文件夹变为一个Python模块, Python 中的每个模块的包中, 都有__init__.py 文件。
通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。
我们在导入一个包时,实际上是导入了它的__init__.py文件。
这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
e.g.
精确导入:
from Root.Pack1 import Pack1Class
import Root.Pack1.Pack1Class
模糊导入:
from Root.Pack1 import *
模糊导入中的*中的模块是由__all__来定义的,__init__.py的另外一个作用就是定义package中的__all__,用来模糊导入,如__init__.py:
__all__ = ["Pack1Class","Pack1Class1"]
从上边的例子可以看出,__init__.py的主要作用是:
1. Python中package的标识,不能删除
2. 定义__all__用来模糊导入
3. 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)
@修饰符,可以在模块或者类的定义层内对函数进行修饰。出现在函数定义的前一行,不允许和函数定义在同一行。
e.g.
def makebold(fn):
def warp():
return "<b>" + fn() + "<b>"
return warp
def makeitalic(fn):
def warp():
return "<i>" + fn() + "<i>"
return warp
@makebold # 这句话相当于makebold(test1),也就是把当前函数传过去
def test1():
return "test1"
@makeitalic
def test2():
return "test2"
@makebold
@makeitalic
def test3(): # 函数和装饰器是倒着执行的,从下往上, 相当于makebold(makeitalic(test3))
return "test3"
print(test1())
print(test2())
print(test3())
OUTPUT>>
<b>test1<b>
<i>test2<i>
<b><i>test3<i><b>