理解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)