美文网首页
python的魔法函数

python的魔法函数

作者: 单细胞空间交响乐 | 来源:发表于2020-10-09 11:31 被阅读0次

    _init_()

    所有类的超类object,有一个默认包含pass的init()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了,编程时显示远比隐式的更好。

    class Employee:
       '所有员工的基类'
       empCount = 0
     
       def __init__(self, name, salary):
          self.name = name
          self.salary = salary
          Employee.empCount += 1
       
       def displayCount(self):
         print "Total Employee %d" % Employee.empCount
     
       def displayEmployee(self):
          print "Name : ", self.name,  ", Salary: ", self.salary
    

    _str_()

    class cat:
    ...     def __init__(self,age,sex):
    ...             self.age = age
    ...             self.sex = sex
    ...     def __str__(self):
    ...             return "年龄是:%s , 性别是:%d" % (self.age, self.sex)
    x = cat(34,'human')
    print(x)
    年龄是:34 , 性别是:human
    

    总结几点:
    1、在Python汇总方法名如果是xxx()格式的,就代表着这个方法名具有特殊的功能,也称为“魔法”方法;
    2、当使用“print()”方法的时候,一旦定义了str(self)方法,那么就会让该类实例对象被print调用时返回类的特定信息,即return方法后的语句。

    _call_()

    将实例变成函数可调用的对象。

    class Person(object):
        def __init__(self, name, gender):
          self.name = name
          self.gender = gender
    
        def __call__(self, friend):
          print 'My name is %s...' % self.name
          print 'My friend is %s...' % friend
    >>> p = Person('Bob', 'male')
    >>> p('Tim')
      My name is Bob...
      My friend is Tim...
    

    python name == ‘main’详细解释

    一.语义解释

    1.__name__

    name 是python的内置属性,是系统全局变量!每一个py文件都有一个属于自己的name
    如果py文件作为模块被导入(import),那么name就是该py文件的文件名(也称 模块名);
    如果py文件直接运行时(Ctrl+Shift+F10),那么name默认等于字符串”main”;
    举个简单的例子:假如你名字是张三,在朋友眼中,你是张三(__name__ == '张三');在你自己眼中,你是你自己(__name__ == '__main__')

    就是有这种操作

    2.”__main__”

    “_ main _” 实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.

    3.name == “main

    当.py文件被直接运行时, if name == “main” 之下的代码块将被运行,该语句就相当与python的main主函数入口,示例代码如下:
    a.新建一个 my_name.py 文件,作为模块文件:

    # 定义一个函数并打印 __name__
    def prit_name():
        print("my_name.py __name__:", __name__)
     
    if __name__ == "__main__":
        prit_name()
    

    b.新建一个 python_main.py 文件,作为启动文件 (Ctrl+Shift+F10):

    # 导入 my_name 模块
    import my_name
     
    # 定义一个函数并打印 __name__
    def prit_name():
        my_name.prit_name()
        print("python_main.py __name__:", __name__)
     
    if __name__ == "__main__":
        prit_name()
    

    输出结果:

    my_name.py __name__: my_name
    python_main.py __name__: __main__
    

    由此可见,作为启动文件 python_main.py ,该文件的内置属性 name 等于 “main”,而my_name.py 作为导入模块,该模块的 name 等于文件名(也称模块名字),所以my_name.py 中的 表达式 if name == “main” 并不成立!

    当直接将my_name.py作为启动文件时,输出:

    my_name.py __name__: __main__
    

    如果py文件作为模块被导入(import),那么name就是该py文件的文件名(也称 模块名);
    如果py文件直接运行时,那么name默认等于字符串”main”;

    废话多

    二.作用

    1.name == “main” 作为启动py文件的main函数入口
    2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:name == “main” 既不会影响你的测试代码,也不会影响别人调用你的接口函数。

    相关文章

      网友评论

          本文标题:python的魔法函数

          本文链接:https://www.haomeiwen.com/subject/vbqlpktx.html