Python对象中一些方法

一、__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__()
# print(egon) #egon.__str__()

二、__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('主程序')

三、item用法

可以实现类于dic['a']这样的方法

# l=['a','b','c']
# dic={'a':1}
#
# print(l[1])
# print(dic['a'])

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))

四、isinstance和issubclass

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

class Foo(object):
pass

obj = Foo()

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

class Foo(object):
pass

class Bar(Foo):
pass

issubclass(Bar, Foo)

五、反射

class Teacher:
# school='oldboy'
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def teach(self):
# print('%s teach' %self.name)

# print(Teacher.school)
# print(Teacher.__dict__['school'])

# print(hasattr(Teacher,'school'))

# print(getattr(Teacher,'school'))
# print(getattr(Teacher,'solasdf',None))

# Teacher.x=123
# setattr(Teacher,'x',123)
# print(Teacher.x)

# delattr(Teacher,'school')
# print(Teacher.school)

#对象
# t=Teacher('egon',18)
# print(hasattr(t,'name'))#判断对象是否有name属性(“以字符串的方式”)

# print(getattr(t,'name'))#获取对象的name属性(“以字符串的方式”)

# setattr(t,'sex','male')#修改对象的sex属性(“以字符串的方式”)
# print(getattr(t,'sex'))
#
# print(t.__dict__)
# delattr(t,'name')
# print(t.__dict__)

# t.teach()
# print(t.school)

# print(getattr(t,'teach'))
# print(getattr(t,'school'))
# t.school='hahahahahahahahahhahahahahahhahahahahahahh'
# print(t.__dict__)

Python进阶---面向对象第三弹(进阶篇)的更多相关文章

  1. Python:Scrapy(三) 进阶:额外的一些类ItemLoader与CrawlSpider,使用原理及总结

    学习自:Python Scrapy 爬虫框架实例(一) - Blue·Sky - 博客园 这一节是对前两节内容的补充,涉及内容为一些额外的类与方法,来对原代码进行改进 原代码:这里并没有用前两节的代码 ...

  2. C++进阶 面向对象基础(三)

    类的的定义: 初始化一般建议使用构造函数初始化列表形式: Person(const string nm, const string addr):name(nm), address(addr){} th ...

  3. 浅谈Hybrid技术的设计与实现第三弹——落地篇

    前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ...

  4. [Python3] 023 面向对象 第三弹

    目录 7. 类相关函数 8. 类的成员描述符(属性) 9. 类的内置属性 10. 类的常用魔术方法 10.1 操作类 10.2 描述符 10.3 属性操作 10.4 运算分类相关魔术方法 接上一篇 [ ...

  5. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型

    一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...

  6. Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞

    一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ...

  7. Python之路(第三十五篇) 并发编程:操作系统的发展史、操作系统的作用

    一.操作系统发展史 第一阶段:手工操作 —— 真空管和穿孔卡片 ​ 第一代之前人类是想用机械取代人力,第一代计算机的产生是计算机由机械时代进入电子时代的标志,从Babbage失败之后一直到第二次世界大 ...

  8. Python之路(第三十二篇) 网络编程:udp套接字、简单文件传输

    一.UDP套接字 服务端 # udp是无链接的,先启动哪一端都不会报错 # udp没有链接,与tcp相比没有链接循环,只有通讯循环 server = socket.socket(socket.AF_I ...

  9. Python网络爬虫第三弹《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

随机推荐

  1. 扩展jquery.validate自定义验证,自定义提示,本地化

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  2. WPF中的imagesource 和内存图片的处理

    [转载]ImageSource的使用心得 很多时候,我们会使用图片来装饰UI,比如作为控件背景等. 而这些图片可以分为两种形式,即存在于本地文件系统中的图片和存在于内存中的图片 对于这两种形式的图片, ...

  3. SAP 参照sto订单创建外向交货BAPI

    DATA: SHIP_POINT TYPE TVST-VSTEL, "装运点/接收点 NUM_DELIVERIES TYPE VBNUM, STOCK_TRANS_ITEMS WITH HE ...

  4. Set 和 Map 数据结构

    Set Set 对象允许你存储任何类型的 唯一值, 无论是 原始值(一共6种,string, number, boolean, undefined, null,和 es6 新增的 symbol) 还是 ...

  5. 笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)

    概念介绍 结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行. 如果我们需要创建结果过滤器需要实现IResultFilter接口. namespa ...

  6. Babylon.GUI官方文档翻译

    Babylon.GUI是一个基于Babylon.js的WebGL库,可以用来在WebGL3D场景中生成交互性UI与动态纹理.相比于html ui,Babylon.GUI的功能较为简化,但使用起来也更加 ...

  7. Taffy自动化测试框架简介

    Taffy Taffy是基于nosetests的自动化测试框架. Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口) ...

  8. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

  9. Windows下swoole扩展的编译安装部署

    1. 到cygwin官网下载cygwin. 官网地址:https://www.cygwin.com/ 2. 打开下载好的cygwin安装包,开始安装cygwin. 选择cygwin的安装目录(这个同时 ...

  10. Spark SQL数据源

    [TOC] 背景 Spark SQL是Spark的一个模块,用于结构化数据的处理. ++++++++++++++ +++++++++++++++++++++ | SQL | | Dataset API ...