断点调试

在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈
变红的地方,程序执行到,就会暂停
断点应该加在报错之前
绿色箭头表示快速跳到下一个断点执行
控制台报错,点击你能看懂的最后一行,光标会快速定位到错误代码,在错误代码上放,加断点,断点调试

issubclass和isinstance

issubclass()

判断第二个类是不是第一个类的子类,返回true或者false

ass Foo:
    pass
class Bar(Foo):
    pass

class Tt(Bar):
    pass
print(Bar.__bases__)
print(issubclass(Bar,Foo))   # true
print(issubclass(Tt,object))   # true

isinstance()

判断第一个参数是不是第二个参数的对象

class Foo:
    pass
class Tt():
    pass

f=Foo()
print(isinstance(f,Foo))    # true
print(isinstance(f,Tt))    # false

反射

用户输入一段字符串,芷心该字符串相对应的方法

hasattr():判断一个属性是否在对象中,返回True或者False
getattr():通过字符串获取属性或方法,如果获取到了,就会返回相应的属性或方法
setattr():通过字符串来设置属性或方法
delattr():通过字符串来删除属性或方法

class Foo:
    def run(self):
        print('run')
    def speak(self):
        print('speak')

p=Foo()
print(Foo.__dict__)
cmd=input('请输入命令:')
#方案一:
# print(Foo.__dict__[cmd])
# Foo.__dict__[cmd](p)
if hasattr(p,cmd):
    run=getattr(p,cmd)
    run()
else:
    print('该命令不存在')

#通过用户输入key和value往对象中赋值
key=input('请输入key:')
value=input('输入value:')
setattr(p,key,value)
print(p.age)

#动态的往对象中放方法
def test(a):
    print(a)
print(p.__dict__)
setattr(p,'test',test)
print(p.__dict__)
p.test(0)
#动态的删除属性

#原始的删除方法
p.name='lqz'
print(p.__dict__)
del p.name
print(p.__dict__)

#动态删除p中属性为变量a的属性
p.name='lqz'
p.age=18
p.sex='male'
a=input('请输入要删除的属性:')
print(p.__dict__)
delattr(p,a)
print(p.__dict__)
#直接p.a是不对的
del p.a

#删除对象中属性为name字符串的属性

#判断一下对象中有没有没有我输入的属性,如果有,打印
p.name='lqz'
p.age=18
p.sex='male'
cmd=input('请输入要查询的属性:')
if hasattr(p,cmd):
    a=getattr(p,cmd)
    print(a)
else:
    print('该属性不存在')

例子:

class BlackMedium:
    feature='Ugly'
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr

    def sell_house(self):
        print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼' %self.name)
    def rent_house(self):
        print('%s 黑中介租房子啦,傻逼才租呢' %self.name)

b1=BlackMedium('万成置地','回龙观天露园')

print(b1.__dict__)
print(hasattr(b1,'sell_house'))
a='sell_house'
getattr(b1,'sell_house')
getattr(b1,a)()
sell_house=getattr(b1,a)
name=getattr(b1,'name')
print(name)
print(sell_house)

delattr(b1,'xxx')
print(b1.__dict__)
delattr(b1,'name')
print(b1.__dict__)

模块也是对象,也可以用这四个方法

使用自己的模块,通过反射来获取模块中是否有我要是用的方法,如果有就执行,没有就提示还没有写完

内置方法

我们之前学过的__init__就是最简单的内置方法

str

如果不重写__str__,print就会打印出内存地址

_repr__ 跟str类似,在交互式命令下直接写变量名,会执行__repr__

class Foo:
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return '['+self.name+']'

f=Foo('nick')
# print(f.__str__())    # 和下一句相同
print(f)    # [nick]

setattr,delattr,getattr

这三者都是点拦截方法

如果去对象中取属性,一旦取不到,会进入到_getattr如果去对象中赋值属性,一旦取不到,会进入到_setattr
如果删除对象中的属性,会进入__delattr__

class Foo:
    def __init__(self,name):
        self.name=name
    # def __getattr__(self, item):
    #     # print('xxxx')
    #     return '你傻逼啊,没有这个字段'
    # def __setattr__(self, key, value):
    #     print('yyyyy')
    def __delattr__(self, item):
        print('zzzzz')

f=Foo('nick')
# print(f.name)
# # print(f.age)
print(f.__dict__)
# print(f.name)
# f.sex='male'

del f.name
print(f.__dict__)

__item__系列

对象通过[]中括号取值,赋值,删除值的时候,会调用

class Foo:
    def __init__(self, name):
        self.name = name
    def __getitem__(self, item):
        name=getattr(self,item)
        # print(name)
        # print(self.__dict__[item])
        return name
        # return self.__dict__[item]
    def __setitem__(self, key, value):
        print('obj[key]=lqz赋值时,执行我')
        self.__dict__[key] = value
    def __delitem__(self, key):
        print('del obj[key]时,执行我')
        self.__dict__.pop(key)

f=Foo('nick')
print(f['name'])

call

加对象会调用

lass Foo:
    def __call__(self):
        print('xxxx')

f=Foo()
f()

__inter__和exit

上下文管理器

class Open:
def __init__(self, name):
self.name = name
def __enter__(self):
print('出现with语句,对象的__enter__被触发,有返回值则赋值给as声明的变量')
# return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('with中代码块执行完毕时执行我啊')
with Open('a.txt') as f:
print('=====>执行代码块')

# print(f,f.name)

day28的更多相关文章

  1. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  2. day28 python学习反射 sinstance和issubclass

    isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 判断这个对象是不是这个类,或者是不是这个类的子类的实例化 class Foo( ...

  3. day28 CRM万能权限组件开发 && 主机管理-堡垒机

    1,CRM项目实战-万能权限组件开发参考博客:http://www.cnblogs.com/alex3714/articles/6661911.html 参考代码:https://github.com ...

  4. Pyhton学习——Day28

    #上下文协议:文件操作时使用with执行# with open('a.txt','w',encoding='utf-8') as f1:# with语句,为了让一个对象兼容with语句,必须在这个对象 ...

  5. day28——C/S与B/S架构、网络通信原理、osi七层协议、UDP、TCP协议、TCP的三次握手与四次挥手

    day28 C/S B/S架构 C:client 客户端 B:browse浏览器 S:server 服务端 C/S C/S架构:基于客户端与服务端之间的通信 ​ QQ.游戏.皮皮虾 ​ 优点:个性化设 ...

  6. day28 进程(Process)

    day28 进程(Process) 1.进程的概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. # 进程是系统进行 ...

  7. javascript实现倒计时-------Day28

    先来两张图片,看一看今天写什么: 看到图片右上角是什么了么看到图片以下是什么了么 相信这个大家都不会陌生吧.那些生活中等着秒杀,等着抢小米人们,焦躁等待的你曾一秒一秒的盯着它看么,我不知道答案,可我知 ...

  8. day28:hashlib

    1,继续上一小节,讲解双下内置方法,双下getitem,setitem,delitem方法,是对象可以像字典一样的来访问属性 # 普通的字典是像下面这样操作的 dic = {'k' : 'v'} di ...

  9. Python:Day28 同步锁

    同步锁: Python不是有一把锁了吗?为什么还要加锁? Python解释器的GIL的作用是同一时刻只有一个线程被CPU执行,而同步锁的作用同一时刻只有一个线程对锁定代码块操作 如果不加锁,当多个线程 ...

  10. day28 面向对象:反射,内置函数,类的内置方法

    面向对象进阶博客地址链接: http://www.cnblogs.com/Eva-J/articles/7351812.html 复习昨日内容: # 包 # 开发规范 # # hashlib # 登录 ...

随机推荐

  1. EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改

    Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...

  2. commix工具配合命令注入

    commix简介 commix是一款由python编写,开源自动化检测系统命令注入工具  https://github.com/commixproject/commix commix 参数 选项: - ...

  3. SSH隧道的使用

    合作部门提供的 redis 集群,kafka 集群,限制条件:无 vpn,仅能通过特定跳板机(无 root 权限)连接调试开发. 想要实现:本地开发连接其 redis 集群,kafka 集群进行开发调 ...

  4. [2018-01-12] laravel--ORM

    建立模型 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { / ...

  5. [开源]基于goapp+xterm实现webssh-网页上的SSH终端(golang)

    简析 基于goapp+xterm实现webssh-网页上的SSH终端. 开源地址见文末. 特性 在网页上实现一个SSH终端.从而无需Xshell之类的模拟终端工具进行SSH连接. 可以对交互命令进行审 ...

  6. NOIP模拟30B 活该

    T1:没有判-1 T2:推出柿子之后手摸错了!,只交了一个表 T3....... 完戏!,就是活该!

  7. python面试题2.1:如何实现栈

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 2.1 如何实现栈 [阿里巴巴面试题] 难度系数:⭐⭐⭐ 考察 ...

  8. C# web项目中sql数据库转sqlite数据库

    最近做了一个小网站,用到了一个使用sql server 2005的.net cms系统,但是现在我所买虚拟主机的服务商,不给虚拟主机提供sql server服务了,那就转数据库吧,转啥好呢,思来想去, ...

  9. 玩转VSCode-完整构建VSCode开发调试环境

    随着VSCode的不断完善和强大,是时候将部分开发迁移到VS Code中了. 目前使用VS2019开发.NET Core应用,一直有一个想法,在VS Code中复刻VS的开发环境,同时迁移到VS Co ...

  10. nyoj 115-城市平乱 (BFS)

    115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...