Python基础知识(17):面向对象编程(Ⅱ)

获取对象信息

在不知道对象信息的情况下,我们想要去获取对象信息,可以使用以下方法

1、type

(1)判断对象类型

  1. >>> type(123)
  2. <class 'int'>
  3. >>> type("name")
  4. <class 'str'>
  5. >>> type(None)
  6. <class 'NoneType'>
  7. >>> type(abs)
  8. <class 'builtin_function_or_method'>
  9. >>> import Person
  10. >>> type(Person)
  11. <class 'module'>

(2)比较两个对象是否是同一个类型

  1. >>> type(123)==type(456)
  2. True
  3. >>> type(123)==int
  4. True

2、isinstance

(1)判断一个对象是否是该类型本身或位于该类型的父类继承链

  1. #play.py
    class Animals(object):
  2. def play():
  3. pass
  4.  
  5. class Dog(Animals):
  6. def play():
  7. pass
  8.  
  9. class Kity(Dog):
  10. def play():
  11. pass
  12.  
  13. a=Animals()
  14. d=Dog()
  15. k=Kity()

  16. >>> import play
  17. >>> isinstance(k,Kity)
  18. True
  19. >>> isinstance(k,Dog)
  20. True
  21. >>> isinstance(k,Animals)
  22. True
  23. >>> isinstance(k,object)
  24. True
  25. >>> isinstance(d,Kity)
  26. False

(2)判断一个变量是否是某些类型中的其中一种

  1. >>> isinstance(123,(str,int))
  2. True

3、dir

获得一个对象的所有属性和方法

  1. >>> dir("Alice")
  2. ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

测试对象属性

hasattr:有没有该属性

setattr:设置该属性

getattr:获取该属性

  1. >>> class Cal(object):
  2. x=2
  3. def cal():
  4. self.y=1
  5. return x+y
  6.  
  7. >>> ca=Cal()
  8. >>> hasattr(ca,"x")
  9. True
  10. >>> setattr(ca,"z",3)
  11. >>> getattr(ca,"z")
  12. 3
  13. >>> getattr(ca,"p")

如果试图获取某个不存在的属性会报错

可以传入一个default参数,如果想获取的属性不存在,就返回默认值

  1. >>> getattr(ca,"p")
  2. Traceback (most recent call last):
  3. File "<pyshell#57>", line 1, in <module>
  4. getattr(ca,"p")
  5. AttributeError: 'Cal' object has no attribute 'p'
  6. >>> getattr(ca,"p",404)
  7. 404

实例属性和类属性

1、实例属性属于各个实例所有,互不干扰

通过实例变量给实例绑定属性

2、类属性属于类所有,所有实例都可以使用

3、当实例属性和类属性名字相同时,类属性将会被屏蔽

Python学习之旅(十八)的更多相关文章

  1. Python学习(三十八)—— Djago之Ajax

    转载自:http://www.cnblogs.com/yuanchenqi/articles/7638956.html 一.Ajax准备知识:json 什么是json? 定义: JSON(JavaSc ...

  2. Python学习笔记第十八周

    目录: 一.JavaScript正则表达式 1.test  2.exec 二.BootStrap  1.响应式  2.图标.字体  3.基本使用 三.Django 1.安装  2.创建目录  3.进入 ...

  3. Python学习日记(二十八) hashlib模块、configparse模块、logging模块

    hashlib模块 主要提供字符加密算法功能,如md5.sha1.sha224.sha512.sha384等,这里的加密算法称为摘要算法.什么是摘要算法?它又称为哈希算法.散列算法,它通过一个函数把任 ...

  4. Python学习之旅(八)

    Python基础知识(7):数据基本类型之元组.字典 一.元组 用括号把元素括起来中间用逗号隔开.用逗号分开一些值便可创建元组 1,2,3 结果: (1, 2, 3) 空元组可以用没有包含任何内容的两 ...

  5. Python学习札记(三十八) 面向对象编程 Object Oriented Program 9

    参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...

  6. Python学习札记(二十八) 模块1

    参考:模块 NOTE 1.模块:一个.py文件称为一个模块. 2.代码模块化的意义:a.提升程序的可维护性 b.不用重复造轮子 3.避免模块冲突,解决方法:引入了按目录来组织模块的方法,称为包(Pac ...

  7. python学习笔记(十八)网络编程之requests模块

    上篇博客中我们使用python自带的urllib模块去请求一个网站,或者接口,但是urllib模块太麻烦了,传参数的话,都得是bytes类型,返回数据也是bytes类型,还得解码,想直接把返回结果拿出 ...

  8. python学习笔记(十八)python操作excel

    python操作excel需要安装通过pip安装xlwt, xlrd这两个模块: pip install xlwt pip insall xlrd 操作excel ,写入excel: import x ...

  9. Python学习(二十八)—— Django模板系统

    转载自http://www.cnblogs.com/liwenzhou/p/7931828.html Django模板系统 官方文档 一.常用语法 只需要记两种特殊符号: {{  }}和 {% %} ...

  10. Python学习笔记(十八)@property

    # 请利用@property给一个Screen对象加上width和height属性, # 以及一个只读属性resolution: # -*- coding: utf-8 -*- class Scree ...

随机推荐

  1. 柳青(Jean)英文演讲集合

    1.Didi Chuxing's Jean Liu on The Future of Cities  https://www.youtube.com/watch?v=G9uPGoN0dvQ 2.Did ...

  2. Python随机字符串验证码

    def code_get(self): source = ['] #数字验证码 # source = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I','J', ...

  3. golang 使用pprof和go-torch做性能分析

    软件开发过程中,项目上线并不是终点.上线后,还要对程序的取样分析运行情况,并重构现有的功能,让程序执行更高效更稳写. golang的工具包内自带pprof功能,使找出程序中占内存和CPU较多的部分功能 ...

  4. webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明

    20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...

  5. 什么是rpc

    远程过程调用协议RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TC ...

  6. Python(可变/不可变类型,list,tuple,dict,set)

    补充:(可用操作技巧) >>> x=900 >>> y=900 >>> x==y True >>> type(x) is typ ...

  7. delphi从TRichEdit获得RTF格式文本(PC版本)

    function GetRTF(RE: TRichedit): string;varstrStream: TStringStream;beginstrStream := TStringStream.C ...

  8. 每天学点Linux-切割命令split

    一种常见的需求是,有一个比较大的文件,需要把它切割成比较小的几个文件,在Linux系统中你就可以使用Split命令了.Split命令可以将一个大的文件按照文件大小或者行数切割成小文件.Split命令的 ...

  9. 【OSPF】防环机制详解

    我们在提到OSPF的时候,时常喜欢说的一句话就是,OSPF能够计算出无环的路由,那么OSPF究竟是如何规避路由环路的呢?OSPF与距离矢量路由协议不同,运行OSPF的路由器之间交互并不是路由信息,而是 ...

  10. 四大中三家已面向客户推出机器人业务解决方案?别逗了,先用机器人自我革命吧! post by 上海嘉冰信息技术

    近日,四大会计师事务所推出的机器人财务及业务解决方案的话题引爆朋友圈.鉴于该话题的前沿性以及对财务及业务领域从业人员未来职业发展有巨大的影响,引起热门讨论在所难免.小编先来汇总下目前国际四大会计师事务 ...