zoukankan      html  css  js  c++  java
  • python类中的一些神奇方法

    __str__:用于在print(对象)时,直接打印__str__的返回值

    1 class Animal:
    2     def __init__(self, name):
    3         self.name = name
    4     def __str__(self):
    5         return self.name
    6 
    7 d = Animal("dog")
    8 print(d)

    __fun_name:私有方法

     1 class Animal:
     2     def __init__(self, name):
     3         self.name = name
     4     def eat(self):
     5         self.__test()
     6         print("吃东西")
     7     #test为私有方法,不能在类外部调用
     8     def __test(self):
     9         print("debug")
    10 
    11 d = Animal("dog")
    12 # 提示 AttributeError: 'Animal' object has no attribute '__test'
    13 # d.__test()
    14 d.eat()

    __del__:对象销毁时调用的方法

     1 class Animal:
     2     def __init__(self, name):
     3         self.name = name
     4     def __del__(self):
     5         print("---go die---")
     6 
     7 d = Animal("dog")
     8 dd = d
     9 del d #仅仅删除一个引用计数,引用计数为0时才销毁对象,并且调用__del__方法
    10 del dd
    11 print("******")

    __new__:根据类对象创建实例对象(发生在__init__之前)

    比如代码中定义了Dog类,在类定义结束后创建了类对象,然后调用Dog()创建实例对象,创建实例对象过程中,如果Dog自己实现了__new__(cls)方法(cls表示根据类对象创建实例对象),那么需要return object.__new__()才能正确创建实例对象。

     1 class Dog(object):
     2     def __init__(self):
     3         print("--init---")
     4 
     5     def __del__(self):
     6         print("--del---")
     7 
     8     def __new__(cls):
     9         print("---new---")
    10         return object.__new__(cls)
    11 
    12 #调用顺序 Dog.__new__ -> object.__new -> d.__init__ -> d.__del__
    13 d = Dog()
    14 
    15 结果:
    16 ---new---
    17 --init---
    18 --del---
  • 相关阅读:
    测试心得---杂七杂八
    Redis 集群缓存测试要点--关于 线上 token 失效 BUG 的总结
    linux基础
    如何获取新系统的业务逻辑?
    python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)
    python笔记8-多线程threading之封装式
    redis监控key失效
    使用PageHepler分页
    使用token和redis怎样判断账户是否失效和异地登录
    JSONObject
  • 原文地址:https://www.cnblogs.com/xhcdream/p/8251684.html
Copyright © 2011-2022 走看看