一 isinstance(obj,cls)和issubclass(sub,super)

isinstance(obj,cls)检查是否obj是否是类 cls 的对象

class Foo(object):
pass
obj = Foo() print(isinstance(obj, Foo))

issubclass(sub, super)检查sub类是否是 super 类的派生类

class Foo(object):
pass class Bar(Foo):
pass print(issubclass(Bar, Foo))
>>True

二、反射

python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

四个实现反射的函数:

hasattr(object,name:判断object中有没有一个name字符串对应的方法或属性

getattr(object, name, default=None):获取属性

setattr(x, 'y', v) :设置属性,is equivalent to ``x.y = v''

delattr(x, 'y') :删除属性,is equivalent to ``del x.y''

四个方法使用的演示:

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(hasattr(b1,'name'))
print(hasattr(b1,'sell_house')) #获取属性
n=getattr(b1,'name'
)
print(n)
func=getattr(b1,'rent_house')
func() # getattr(b1,'aaaaaaaa') #报错
print(getattr(b1,'aaaaaaaa','不存在啊')) #设置属性
setattr(b1,'sb',True)

setattr(b1,'show_name',lambda self:self.name+'sb')
print(b1.__dict__)
print(b1.show_name(b1)) #删除属性
delattr(b1,'addr')

delattr(b1,'show_name')
delattr(b1,'show_name111')#不存在,则报错 print(b1.__dict__) 四个方法的使用演示  

  

三、__str__

__str__:定义在类内部的内置的绑定方法,打印的会自动将对象传入

class Teacher:
def __init__(self,name,age):
self.name=name
self.age=age
self.courses=[] def teach(self):
print('%s teach' %self.name) def __str__(self):
return '<name:%s age:%s>' %(self.name,self.age) class Course:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
def __str__(self):
return '《name:%s price:%s period:%s》' %(self.name,self.price,self.period) egon=Teacher('egon',18)
print(egon) #egon.__str__()
>>:
<name:egon age:18>
python=Course('python',20000,'6mon')
openstack=Course('openstack',10,'3mon')
linux=Course('linux',1,'1mon') egon.courses.append(python)
egon.courses.append(openstack)
egon.courses.append(linux) # egon.courses.extend([python,openstack,linux])
print(egon.courses)
for obj in egon.courses:
  print(obj)

>>:
[<__main__.Course object at 0x0000027F4FF70748>, <__main__.Course object at 0x0000027F4FF70780>, <__main__.Course object at 0x0000027F4FF70710>]
《name:python price:20000 period:6mon》
《name:openstack price:10 period:3mon》
《name:linux price:1 period:1mon》

四、__del__

析构方法,当对象在内存中被释放时,自动触发执行。

import time
class Foo:
def __init__(self,x):
self.x=x
print('connect mysql') #conn=abcdef('192.168.1.10',3306) def __del__(self):
'''做一些与这个对象有关的清理操作'''
# conn.close()
# file.close()
print('====>') f=Foo(10)
del f #f.__del__()
time.sleep(3)
print('主程序')
>>:
connect mysql
====>
主程序 f=Foo(10)
time.sleep(3)
print('主程序')
>>:
connect mysql
主程序
====>

 

五、__item__系列

 

class Foo:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def __getitem__(self, item):
# print(self,item,type(item))
# return getattr(self,item)
return self.__dict__[item]
def __setitem__(self, key, value):
# setattr(self,key,value)
self.__dict__[key]=value def __delitem__(self, key):
# delattr(self,key)
self.__dict__.pop(key) def __len__(self):
return 10
f=Foo('egon',18,'male')
print(f.name) #f['name']
print(f.age) #f['age']
print(f.sex) #f['sex'] print(f['name']) f['name']='egon_nb'
print(f.__dict__)
del f['name']
print(f.__dict__)
print(len(f))

>>:
egon
18
male
egon
{'name': 'egon_nb', 'age': 18, 'sex': 'male'}
{'age': 18, 'sex': 'male'}
10

Python基础(18)_面向对象程序设计2(反射、__str__、__del__、__item__系列)的更多相关文章

  1. Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)

    上节课复习:1.编程思想    面向过程        核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...

  2. python基础——18(面向对象2+异常处理)

    一.组合 自定义类的对象作为另一个类的属性. class Teacher: def __init__(self,name,age): self.name = name self.age = age t ...

  3. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  4. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  5. python基础教程_学习笔记9:抽象

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/30745465 抽象 懒惰即美德. 抽象和结构 抽 ...

  6. Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)

    一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metacl ...

  7. python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射

    多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...

  8. python基础教程_学习笔记18:标准库:一些最爱——shelve

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...

  9. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

随机推荐

  1. java - day08 - ArrayFounderTrans

    package day07_addition; import java.util.Arrays; import java.util.Random; //数组 伸缩.增删.位移.复制 public cl ...

  2. 【实用】如何在windows下快速截图?

    如何在windows下快速截图? 快速截图是很多人的需求.截图的工具和方案也很多,但是,这里给出一个通用的,被大众认为最高效的一个解决方案. 我们都知道键盘上有一个"prt sc" ...

  3. php windows 扩展redis

    一:客户端安装redis (1)下载地址:https://github.com/dmajkic/redis/downloads 根据电脑是多少位的使用对应的文件,如我的是64bit,那么我就选择64b ...

  4. 第一百九十一节,jQuery EasyUI 入门

    jQuery EasyUI 入门 学习要点: 1.什么是 jQuery EasyUI 2.学习 jQuery EasyUI 的条件 3.jQuery EasyUI 的功能和优势 4.其他的 UI 插件 ...

  5. java后台如何根据表单中input的顺序获取value值

    如果java后台准备用Servlet来实现,可以直接在doPost( )或者doGet( )中使用如下语句:request.setCharacterEndoding("UTF-8" ...

  6. Unix OpenCV安装

    官方下载:https://sourceforge.net/projects/opencvlibrary/files/  最好下载2.4.13版本,不然可能会有很多奇奇怪怪的问题 解压后: mkdir ...

  7. OpenCV学习笔记十五:opencv_features2d模块

    一,简介: 该库用于2D特征检测,描述与匹配.

  8. python静态网页爬虫之xpath(简单的博客更新提醒功能)

    直接上代码: #!/usr/bin/env python3 #antuor:Alan #-*- coding: utf-8 -*- import requests from lxml import e ...

  9. Git安装部署

    1.1 最新git源码下载地址 https://github.com/git/git/releases https://www.kernel.org/pub/software/scm/git/ 1.2 ...

  10. diango-tinymce富文本编译器

    应用到项目中 在settings.py中为INSTALLED_APPS添加编辑器应用 INSTALLED_APPS = ( ... 'tinymce', ) 在settings.py中添加编辑配置项 ...