• 理解self与this


      刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?
    你看完这篇文章后就会明白所有的疑问。

    self代表类的实例,而非类。

    实例来说明

    class Test:
        def prt(self):
            print(self)
            print(self.__class__)
    
    t = Test()
    t.prt()

     执行结果如下

    <__main__.Test object at 0x000000000284E080>
    <class '__main__.Test'>

     从上面的例子中可以很明显的看出,self代表的是类的实例。而self.__class__则指向类。

    self不必非写成self

      有很多童鞋是先学习别的语言然后学习Python的,所以总觉得self怪怪的,想写成this,可以吗?
    当然可以,还是把上面的代码改写一下。

    class Test:
        def prt(this):
            print(this)
            print(this.__class__)
    
    t = Test()
    t.prt()

     改成this后,运行结果完全一样。

    当然,最好还是尊重约定俗成的习惯,使用self。

    类或对象的绑定方法默认将self传入

    对象的绑定方法调用:
        obj.prt(self)
    相当于:对象.对象的绑定方法(第一个self是对象自己,第二个self是别的继承的类等)

     局部变量的使用

    # 在方法内使用局部变量,需要用对象来获取,不能直接拿到dic
    class
    Visit(): dic = {} def __init__(self,history): self.history = history # self 是对象,传入对象,对象.属性 def request_visit(self,request,): ip = request.META.get('REMOTE_ADDR') ctime = time.time() if ip not in self.dic: self.dic[ip] = [ctime,] return True self.history = self.dic.get(ip)
  • 相关阅读:
    Java数据结构概述·14
    Java之自定义异常·13
    idea spirng项目jsp页面乱码
    HashMap和LinkedHashMap的区别
    jar包导入仓库中
    后台接口接受前端参数的时候使用包装类和基本类型接受
    转 为什么程序员怕改需求?
    thymeleaf常用标签
    linux查看端口占用情况
    查询linux硬件配置
  • 原文地址:https://www.cnblogs.com/xuechengeng/p/10413553.html
Copyright © 2020-2023  润新知