• Python笔记 【无序】 【四】


    魔法方法
    1.__xx__  总是被双下划线包围
    2.面向对象python的一切
    3.能够在适当的时候自动被调用
     
     
    构造和析构
     __init__(self,……) -----相当于构造方法,类在实例化对象的时候首先调用的方法
    可以在此对所有涉及到的变量定义并初始化,避免触发__repr__/__str__魔法方法时,出现异常】
     
     
    类定义时,有时候写有时不写的原因:
    由需求来定!【需要初始化操作时】
     

    比如需要传入两个参数时 ---__init__(self,x,y)
    赋值时:
    self.x =  x
    self.y =y    实例化后对象中的值 = 参数
     
     
    __init__方法传回的是None对象,不能在其中return xxx
     
    对象实例化所调用第一个方法是__new__(类【,……】)方法  如果有参数,该参数原封不动的传给__init__方法
    极少重写,返回一个实例化对象
     

    但继承不可变类且要修改的时候,要重写:
    class AAA(str)://由于str不可改变,所以,无法通过__init__方法对其修改,因为__init__自身就是一个不可改变的对象
      def __new__(cls,string)://因为str不可修改,所以要在实例化之前调用此方法
         string = string.upper()
         return str.__new__(cls,string) //让str的__new__方法处理return

    析构器__del__(self)
    不是用的时候就直接删除,而是该对象的所有引用均被删除的时候,再del xx就会自动调用该方法
     
     
    工厂函数 ----就是类对象
    类定义好之后,就是类对象

    class C:
      pass
    type(C) --- type
     

    a  = int('123') ---返回实例对象
     
     
    魔法方法中进行算术运算时:
    小心无限迭代
    class AA(int):
      def __add__(self,other)
        return int.__add__(self,other)//正确用法
    a = AA(3)
    b = AA(4)
    a+b
    7
    若 return self + other
    则无限迭代 ---"+"触发__add__(self,other)
     
     
    魔法方法中的算术

    通过对指定魔法方法的重写,完全可以让python去实现自己的意图
    class int(int):
      def __add__(self,other):
          return int.__xxx__(self,other)
     

    简单定制
      定制计时器的类
    使用time模块的localtime方法获得时间

     ---time模块的详解(时间获取+转换)
    https://fishc.com.cn/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

    time.localtime返回struct_time的时间格式
    表现你的类
    __str__【被打印时需要字符串输出的时候,自动触发的魔法方法
     
    __repr__【
    class xx():
    def __repr__:
      return "xxxxx"
    a = xx()
    a//直接调用对象时,自动触发的魔法方法
    xxxx】
     
     
    属性访问

    class C():
      def __init__(self):
        self.x = 'yyy'
    1.c= C()
       c.x //访问属性

    2.getattr(a,'b','c') //类,哪个属性,如果没有显示的文字

    3.x = property(获得属性的名字,设置,删除) ---以属性的方法访问属性

    通过c.x访问别的属性 删除c.x也会删除c.*相应的属性
     
     
    所有的类的父类都是object类!!!!即使没有明示Xx(y),也是默认
     
     

    描述符
    将某种特殊类型的类【实现以下或其中一个】的实例指派给另一个类的属性
    1.__get__(self,instance,owner)//访问属性,返回属性的值
    2.__set__(self,instance,value)//将在属性分配【即赋值】中调用,不返回任何内容
    3.__delete__(self,instance)//控制删除操作,不反回任何内容
     


    __doc__ ---格式有问题
    需要print(xx.__doc__)
     
     
    help(xx)
     

    dir(xx) --查看xx的列表
     

    如果有__all__,可利用xx.__all__过滤没用的,得到主要的
    若有__all__,则此处采用from xx import *引入的即是xx.__all__的
     
     
    __file__属性   ----源代码的位置
     
     
    类对象实例对象
  • 相关阅读:
    Windows Server 2012 R2 英文版安装中文语言包教程
    远程连接提示要求的函数不受支持如何解决
    Authenticator App 两步验证会不会造成亚马逊账号关联?
    Linux环境下查看历史操作命令及清除方法(history -c)
    出现Strict Standards: Only variables should be passed by reference in的解决方法
    Mysql索引优化
    MySQL性能优化(四)-- MySQL explain详解
    接口性能指标TP90
    本地项目git初始化并提交远程仓库
    git强制推送命令
  • 原文地址:https://www.cnblogs.com/expedition/p/10699670.html
Copyright © 2020-2023  润新知