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. mysql导出数据库和恢复数据库代码

    mysql导出数据库和备份数据库 用mysqldump 命令行 命令格式 mysqldump -u 用户名 -p  数据库名 > 数据库名.sql 范例: mysqldump -uroot -p ...

  2. [js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件

    隔行变色功能,不用js,直接用css伪类就可以做,这个实例可以作为js插件开发很好的入门级实例.本文实现的隔行变色包括以下功能: 1,支持2种常用结构共存( div元素 和 表格类型 ) 2,一个页面 ...

  3. MVC中View界面数据呈现示例

    @using System.Text; @model List<MvcShopping.Models.ProductCategory> @{ ViewBag.Title = "测 ...

  4. 自动化双向数据绑定AngularJs---入门

      前  言   AngularJS,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...

  5. MIRO做发票校验时实现替代功能的多种方式

    http://blog.sina.com.cn/s/blog_3f2c03e30100ngje.html MIRO做发票校验时,如果需要对产生的会计凭证做某些字段的替代,可有多种方法. 1.GGB1替 ...

  6. 数组去重方法(ES6)

    let arrayBefore = [1,3,3,2,1,5,2,1]; //去重之前的数组 Array.prototype.dedupe = function (){ //去重函数 返回去重后的数组 ...

  7. [bzoj2131]免费的馅饼 树状数组优化dp

    2131: 免费的馅饼 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行是 ...

  8. 见到过的MOS管的一些参数

    选择MOS管的时候需要注意的几个参数1,VDSS(击穿电压):此电压要选择合适,一般是加入的电压值的峰值的两倍.2,VGS(th)(开启电压):3,RDS(on)(漏源电阻):这个值要尽可能的小,因为 ...

  9. 【转】S3C2440存储系统-SDRAM驱动

    SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)也就是通常所说的内存.内存的工作原理.控制时序.及相关控制器的配置方法一直是嵌入式系统 ...

  10. HTML笔记<note1>

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...