Python进阶---面向对象第三弹(进阶篇)
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进阶---面向对象第三弹(进阶篇)的更多相关文章
- Python:Scrapy(三) 进阶:额外的一些类ItemLoader与CrawlSpider,使用原理及总结
		学习自:Python Scrapy 爬虫框架实例(一) - Blue·Sky - 博客园 这一节是对前两节内容的补充,涉及内容为一些额外的类与方法,来对原代码进行改进 原代码:这里并没有用前两节的代码 ... 
- C++进阶 面向对象基础(三)
		类的的定义: 初始化一般建议使用构造函数初始化列表形式: Person(const string nm, const string addr):name(nm), address(addr){} th ... 
- 浅谈Hybrid技术的设计与实现第三弹——落地篇
		前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ... 
- [Python3] 023 面向对象 第三弹
		目录 7. 类相关函数 8. 类的成员描述符(属性) 9. 类的内置属性 10. 类的常用魔术方法 10.1 操作类 10.2 描述符 10.3 属性操作 10.4 运算分类相关魔术方法 接上一篇 [ ... 
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
		一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ... 
- Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞
		一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ... 
- Python之路(第三十五篇) 并发编程:操作系统的发展史、操作系统的作用
		一.操作系统发展史 第一阶段:手工操作 —— 真空管和穿孔卡片  第一代之前人类是想用机械取代人力,第一代计算机的产生是计算机由机械时代进入电子时代的标志,从Babbage失败之后一直到第二次世界大 ... 
- Python之路(第三十二篇) 网络编程:udp套接字、简单文件传输
		一.UDP套接字 服务端 # udp是无链接的,先启动哪一端都不会报错 # udp没有链接,与tcp相比没有链接循环,只有通讯循环 server = socket.socket(socket.AF_I ... 
- Python网络爬虫第三弹《爬取get请求的页面数据》
		一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ... 
随机推荐
- hdu  4057--Rescue the Rabbit(AC自动机+状压DP)
			题目链接 Problem Description Dr. X is a biologist, who likes rabbits very much and can do everything for ... 
- JS在可编辑的div中的光标位置插入内容或表情
			<input type="button" value="插入字符" onclick="document.getElementById('test ... 
- Scala 运算符和集合转换操作示例
			Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为 ... 
- Mac使用nginx+rtmp服务器
			一.安装Homebrow 已经安装了brow的可以直接跳过这一步.执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ... 
- nginx URL重写
			html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ... 
- sublime addons backup
			1.you can create a file to store you installed addons and use git to store github.com just like that ... 
- WAMPServer配置修改及问题汇总
			备忘录 软件版本wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b -------------------------------------- ... 
- .NET下发送邮件遇到问题及解决方案
			.NET后台代码利用QQ邮箱服务器发送邮件遇到的问题: "mail from address must be same as authorization user" 首先,看下我的 ... 
- 【转】认识物理I/O构件- 主机I/O总线
			在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ... 
- jquery的遍历选择器-随机整理下
			我从w3c上截了一张图,如图所示: 下面我们来详细说一说.这些选择器. 1.add() 方法将元素添加到匹配元素的集合中.例子: .add(selector) $("div").a ... 
