1.嵌套

  • 类/方法/对象都可以当做变量或嵌套到其他类型中.
  • 函数的参数可以是任意类型.
  • 可哈希(不可变)数据类型可以做字典的key.
  • 类和对象可以做字典的key.

2.特殊方法(8)

  • __init__ #初始化方法: 用于给对象赋值

    class Foo:
    """
    类是干啥的。。。。
    """
    def __init__(self,a1):
    """
    初始化方法
    :param a1:
    """
    self.a1 = a1 obj = Foo('alex')
  • __new__ #构造方法: 在init之前用于创建对象

    class Foo(object):
    def __init__(self):
    """
    用于给对象中赋值,初始化方法
    """
    self.x = 123
    def __new__(cls, *args, **kwargs):
    """
    用于创建空对象,构造方法
    :param args:
    :param kwargs:
    :return:
    """
    return object.__new__(cls) obj = Foo()
  • __call__ 对象后面加()执行cal方法;

    class Foo(object):
    def __call__(self, *args, **kwargs):
    print('执行call方法') # obj = Foo()
    # obj()
    Foo()()
  • __getitem__ __setitem__ __delitem__

    class Foo(object):
    
        def __setitem__(self, key, value):
    pass def __getitem__(self, item):
    return item + 'uuu' def __delitem__(self, key):
    pass obj1 = Foo()
    obj1['k1'] = 123 # 内部会自动调用 __setitem__方法
    val = obj1['xxx'] # 内部会自动调用 __getitem__方法
    print(val)
    del obj1['ttt'] # 内部会自动调用 __delitem__ 方法
  • __str__打印一个对像时,str返回什么打印什么

    class Foo(object):
    def __str__(self):
    """
    只有在打印对象时,会自动化调用此方法,并将其返回值在页面显示出来
    :return:
    """
    return 'asdfasudfasdfsad' obj = Foo()
    print(obj)
  • __dict__

    class Foo(object):
    def __init__(self,name,age,email):
    self.name = name
    self.age = age
    self.email = email obj = Foo('alex',19,'xxxx@qq.com')
    val = obj.__dict__ # 去对象中找到所有变量并将其转换为字典
    print(val)
  • 上下文管理

    class Foo(object):
    def do_something(self):
    print('内部执行') class Context:
    def __enter__(self):
    print('进入')
    return Foo() def __exit__(self, exc_type, exc_val, exc_tb):
    print('推出') with Context() as ctx:
    print('内部执行')
    ctx.do_something()
  • __add__两个对象相加

    val = 5 + 8
    print(val) val = "alex" + "sb"
    print(val) class Foo(object):
    def __add__(self, other):
    return 123 obj1 = Foo()
    obj2 = Foo()
    val = obj1 + obj2
    print(val)
    • 特殊成员:就是为了能够快速实现执行某些方法而生。

3.内置函数补充

  1. type
  • 查看数据类型

    class Foo:
    pass obj = Foo() if type(obj) == Foo:
    print('obj是Foo类的对象')
  1. issubclass
  • 查看是不是有继承关系

    class Base:
    pass class Base1(Base):
    pass class Foo(Base1):
    pass class Bar:
    pass print(issubclass(Bar,Base))
    print(issubclass(Foo,Base))
  1. isinstance
  • 判断一个对象是不是父类或者基类的实例

    class Base(object):
    pass class Foo(Base):
    pass obj = Foo() print(isinstance(obj,Foo)) # 判断obj是否是Foo类或其基类的实例(对象)
    print(isinstance(obj,Base)) # 判断obj是否是Foo类或其基类的实例(对象)
  1. super().func()
class Base(object): # Base -> object
def func(self):
super().func()
print('base.func') class Bar(object):
def func(self):
print('bar.func') class Foo(Base,Bar): # Foo -> Base -> Bar
pass obj = Foo()
obj.func() # super().func() 根据self对象所属类的继承关系,按照顺序挨个找func方法并执行(找到第一个就不在找了)

4.异常处理

  1. 基本格式

    try:
    pass
    except Exception as e:
    pass
  • finally 只要try的内容终止,最后无论对错都会执行

    try:
    int('asdf')
    except Exception as e:
    print(e) # e是Exception类的对象,中有一个错误信息。
    finally:
    print('最后无论对错都会执行')
    • 主动触发异常
    try:
    int('123')
    raise Exception('阿萨大大是阿斯蒂') # 代码中主动抛出异常
    except Exception as e:
    print(e)
    def func():
    result = True
    try:
    with open('x.log',mode='r',encoding='utf-8') as f:
    data = f.read()
    if 'alex' not in data:
    raise Exception()
    except Exception as e:
    result = False
    return result
    • 自定义异常
    class MyException(Exception):
    pass try:
    raise MyException('asdf')
    except MyException as e:
    print(e)
    class MyException(Exception):
    def __init__(self,message):
    super().__init__()
    self.message = message try:
    raise MyException('asdf')
    except MyException as e:
    print(e.message)

python学习day21 面向对象(三)嵌套/特殊方法的更多相关文章

  1. python学习之面向对象(三)

    6.8 类的结构细化 6.8.1 类的私有成员 类中的私有成员包括:私有类的属性,私有对象属性,私有类方法 私有静态属性 类的内部可以访问,类的外部不可以访问,派生类中不可以访问 class A: _ ...

  2. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  3. python学习日记(基础数据类型及其方法01)

    数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...

  4. 小菜学习设计模式(三)—工厂方法(Factory Method)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

  5. python学习心得第三章

    python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...

  6. Python学习系列(三)(字符串)

    Python学习系列(三)(字符串) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) 一个月没有更新博客了,最近工作上有点小忙,实在是没有坚持住,丢久又有感觉写的必要了 ...

  7. Python学习笔记(三)字符串类型及其操作(2)

    1.字符串的表示 字符串是字符的序列表示,可以由一对单引号(‘).双引号(“)或三引号(’‘’)构成.其中,单引号.双引号和三引号都可以表示单行字符串,但是只有三引号可以表示多行字符串 在使用双引号时 ...

  8. python学习笔记--面向对象的编程和类

    一.面向对象的编程 面向对象程序设计--Object Oriented Programming,简称oop,是一种程序设计思想.二.面向对象的特性类:class类,对比现实世界来说就是一个种类,一个模 ...

  9. 读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」

    0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之 ...

随机推荐

  1. es6 for of 循环

    es6 新增了 for of 循环,只要继承了Iterator 接口的数据集合都可以使用 for of 去循环 for of 循环,统一数据集合的循环方法,解决了forEach循环的不能使用break ...

  2. webpack4.x笔记-配置基本的前端开发环境(一)

    webpack的基本使用 webpack 本质上是一个打包工具,它会根据代码的内容解析模块依赖,帮助我们把多个模块的代码打包.借用 webpack 官网的图片: 虽然webpack4.x的版本可以零配 ...

  3. 洛谷P2664 树上游戏(点分治)

    题意 题目链接 Sol 神仙题..Orz yyb 考虑点分治,那么每次我们只需要统计以当前点为\(LCA\)的点对之间的贡献以及\(LCA\)到所有点的贡献. 一个很神仙的思路是,对于任意两个点对的路 ...

  4. CSS中的一下小技巧1之CSS3三角形运用

    使用CSS3实现三角形: 在前端页面中有很多时候会遇到需要三角形图案的时候,以前不知道可以用CSS3实现三角形的时候,一般都是叫UI把三角形图案切出来. 后来知道原来可以用CSS3实现三角形,可是用过 ...

  5. 使用WordPress制作微信小程序

    0 产品由来 微信小程序具有即来即用.轻量化.与微信贴合性好的特点.对于独立产品来说,使用微信小程序能够较好的服务与个人及现在的互联网社群,提升用户体验. 本次设计的微信小程序是面向无人机开发者社区的 ...

  6. 【设计模式】桥接模式 Bridge Pattern

    开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...

  7. 【已采纳】最快获取package和activity的方式

    意外找到一个本人自认为是最快获取package和activity的方法,欢迎来辩! 用adb命令快速查看某应用appPackage及appActivity的方法(前提是需要用数据线连接真机\模拟器也可 ...

  8. DataPipeline | 享物说产品负责人夏凯:数据驱动的用户增长实战

    夏凯 卡内基梅隆大学计算机系毕业,曾供职于Evernote数据团队和微软Bing.com搜索引擎广告部门.回国后作为早期成员加入小红书,先后从事大数据,用户增长,项目和团队管理等工作. 我最初是在美国 ...

  9. python中os模块和sys模块的常见用法

    OS模块的常见用法 os.remove()   删除文件 os.rename()   重命名文件 os.walk()    生成目录树下的所有文件名 os.chdir()    改变目录 os.mkd ...

  10. SQLserver2008一对多,多行数据显示在一行

    现在有一个需求 我们有一张表employee EmpID EmpName ---------- ------------- 张山 张大山 张小山 李菲菲 李晓梅 Result I need in th ...