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

获取对象信息

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

1、type

(1)判断对象类型

>>> type(123)
<class 'int'>
>>> type("name")
<class 'str'>
>>> type(None)
<class 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> import Person
>>> type(Person)
<class 'module'>

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

>>> type(123)==type(456)
True
>>> type(123)==int
True

2、isinstance

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

#play.py
class Animals(object):
def play():
pass class Dog(Animals):
def play():
pass class Kity(Dog):
def play():
pass a=Animals()
d=Dog()
k=Kity()

>>> import play
>>> isinstance(k,Kity)
True
>>> isinstance(k,Dog)
True
>>> isinstance(k,Animals)
True
>>> isinstance(k,object)
True
>>> isinstance(d,Kity)
False

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

>>> isinstance(123,(str,int))
True

3、dir

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

>>> dir("Alice")
['__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:获取该属性

>>> class Cal(object):
x=2
def cal():
self.y=1
return x+y >>> ca=Cal()
>>> hasattr(ca,"x")
True
>>> setattr(ca,"z",3)
>>> getattr(ca,"z")
3
>>> getattr(ca,"p")

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

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

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

实例属性和类属性

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

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

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

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

最新文章

  1. AnimationsDemo中的ZoomActivity代码分析
  2. JS识别ios &amp; 安卓
  3. phpcms从表v9_news_data中字段content中用正则取出图片的地址输出
  4. (C#) 基本概念一览表
  5. C语言深度剖析学习错误点记录
  6. ios开发错误笔记
  7. ISO9001、ISO14001、OHSAS18000什么意思
  8. 聊聊js运算符 ‘与(&amp;&amp;)’和‘ 或(||)’
  9. android dom方式创建xml
  10. discuz二次开发笔记(三)------discuz的安装步骤
  11. JQuery EasyUI combobox动态添加option
  12. 8.多线程和Socket通信
  13. 【模板】最近公共祖先(LCA)
  14. No space left on device Linux系统磁盘空间已满
  15. 离线安装expect
  16. 如何打包/运行jar包,及生成exe文件
  17. CentOS7局域网下安装离线Ambari
  18. 构建-0 Gradle DSL 属性和方法【API】
  19. Task 6.2站立会议一
  20. ElasticSearch安装和head插件安装

热门文章

  1. debian linux sudo 无法执行以添加普通用户到sudo
  2. typescript 与 js 开发 react 的区别
  3. MATLAB 程序计算结果出现 复数(a+bi)问题
  4. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -
  5. 一个会学习(观察-&gt;活学-&gt;求变)的人,在任何领域都能变得强大无比
  6. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
  7. golang 类型转换
  8. 免费ss账号网站
  9. jQuery(三) javascript跨域问题(JSONP解决)
  10. [k8s]Docker 用户使用 kubectl 命令指南-unkown排错(kubelet端口解析)