关键词:
内建函数 | 描 述 |
issubclass(sub,sup) | 如果类sub是类sub的子类,则返回True,反之为False |
isinstance(obj1,obj2) | 如果实例obj是类obj2或者obj2子类的一个实例,则返回True,反之为False |
hasattr(obj,attr) | 如果obj有属性attr,则返回True |
getattr(obj,arrt[,default]) | 返回对象obj的arrt属性,如果不存在,可以设置一个默认值,否则报错 |
setattr(obj,attr,val) | 设置obj的属性attr,替换任何已存在的属性值 |
delattr(obj,attr) | 从对象中删除属性 |
dir(obj=None) | 返回对象的属性的一个列表;如果没有给定obj,dir()则显示局部名称空间中的属性,也就是local().keys() |
super(type,obj=None) |
返回一个代表父类类型的代理对象;如果没有传入obj,则返回super对象是非绑定的,反之,如果obj是一个type,issubclass(obj,type)必为True,否则,isinstance(obj,type)就必为True。 |
vars(obj=None) | 返回obj的属性及其值的一个字典,如果没有给出obj,var()显示局部名称空间字典(属性及其值),也就是locals(). |
首先给出一个类:
>>> class Test(object): ... first_eps = 123 ... def __init__(self,name,age): ... self.name = name ... self.age = age ...
1.__dict__
由一个字典组成,包含一个实例的所有属性。键是属性名,值是属性相应的数据值。也可以在查看类,不过没啥具体的意义。
>>> t1 = Test(‘kebi‘,25) >>> Test.__dict__ mappingproxy({‘__module__‘: ‘__main__‘, ‘first_eps‘: 123, ‘__init__‘: <function Test.__init__ at 0x0000026C0F2FBF28>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Test‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Test‘ objects>, ‘__doc__‘: None}) >>> t1.__dict__ {‘name‘: ‘kebi‘, ‘age‘: 25}
还存在一个__class__,没多大的作用。
>>> t1.__class__ <class ‘__main__.Test‘> >>> Test.__class__ <class ‘type‘>
2.issubclass()和isinstance()
issubclass():布尔函数判断一个类是另一个类的子类或者子孙类。
>>> class A: ... pass ... >>> class B: ... pass >>> class C(B): ... pass >>> b = B() >>> issubclass(C,B) True >>> issubclass(C,A) False >>> issubclass(b,B) #不能用于判断一个对象是否是一个类的实例。 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: issubclass() arg 1 must be a class
isinstance():布尔函数判断一个对象是否是另一个指定类的实例。
>>> isinstance(b,B) True >>> isinstance(b,C) False >>> isinstance(C,B) #不能用于判断子类和父类 False
3.hasattr()、getattr()、setattr()、delattr()
hansattr()函数是布朗型,它的目的就是为了决定一个对象是否有一个特定的属性,一般用与访问某属性前实现做一下检查。
getattr()函数获取相应的属性,可以设置不存在时的默认值。
setattr()函数要么创建一个新的属性,要么取代一个已经存在的属性。
delattr()函数会从一个对象中删除属性。
>>> class Test(object): ... first_express = 123 ... def __init__(self,name,age): ... self.name = ‘kebi‘ ... self.age = 25 ... def print_att(self): ... print(‘%s:%s‘%(self.name,self.age)) ... >>> t = Test(‘kebi‘,25) >>> getattr(t,‘name‘) #获取实例属性的值 ‘kebi‘ >>> getattr(t,‘age‘) 25 >>> hasattr(t,‘age‘) #查询实例的属性中是否存在age属性 True >>> hasattr(t,‘sex‘) False >>> setattr(t,‘age‘,35) #改age属性 >>> getattr(t,‘age‘) #已经修改 35 >>> setattr(t,‘sex‘,‘boy‘) #添加属性, >>> getattr(t,‘sex‘) ‘boy‘ >>> delattr(t,‘sex‘) #删除属性 >>> getattr(t,‘sex‘) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ‘Test‘ object has no attribute ‘sex‘
*attr()系列函数可以在各种对象下工作,不限于类(class)和实例(instance).
4.dir()
之前我们使用过用dir()列出一个模块的所有属性。
>>> import math >>> dir(math) [‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘acos‘, ‘acosh‘, ‘asin‘, ‘asinh‘, ‘atan‘, ‘atan2‘, ‘atanh‘, ‘ceil‘, ‘copysign‘, ‘cos‘, ‘cosh‘, ‘degrees‘, ‘e‘, ‘erf‘, ‘erfc‘, ‘exp‘, ‘expm1‘, ‘fabs‘, ‘factorial‘, ‘floor‘, ‘fmod‘, ‘frexp‘, ‘fsum‘, ‘gamma‘, ‘gcd‘, ‘hypot‘, ‘inf‘, ‘isclose‘, ‘isfinite‘, ‘isinf‘, ‘isnan‘, ‘ldexp‘, ‘lgamma‘, ‘log‘, ‘log10‘, ‘log1p‘, ‘log2‘, ‘modf‘, ‘nan‘, ‘pi‘, ‘pow‘, ‘radians‘, ‘sin‘, ‘sinh‘, ‘sqrt‘, ‘tan‘, ‘tanh‘, ‘tau‘, ‘trunc‘]
dir()的功能远不如此。下面时python文档中的说法。
dir()作用在实例上(经典类或新式类)时,显示实例的变量,还有在实例所在的类及所有它的基类中定义的方法和属性。
>>> dir(t)
[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘age‘, ‘first_express‘, ‘name‘, ‘print_att‘]
dir()作用在类上时,则显示类以及它的所有基类的·__dict__中的内容。但它不会显示定义在元类中的属性
>>> set(dir(t)) - set(dir(Test)) {‘age‘, ‘name‘}
dir()作用在模块上时,则显示模块的__dict__的内容。
>>> import math >>> dir(math) [‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘acos‘, ‘acosh‘, ‘asin‘, ‘asinh‘, ‘atan‘, ‘atan2‘, ‘......
dir()不带参数时,则显示调用者的局部变量。
>>> dir() [‘A‘, ‘B‘, ‘C‘, ‘Test‘, ‘Test_one‘, ‘__annotations__‘, ‘__builtins__‘, ‘__doc__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘b‘, ‘t‘, ‘t1‘, ‘t2‘]
5.super()
super()这个函数可以帮我们找出类相应的父类,然后方便调用某些属性。
6.vars()
与dir()类似,返回一个字典,它包含了对象存储于其__dict__中的属性(键)和值。
如果没有提供对象作为var()的参数,它将显示一个包含本地名称空间的属性极其值的字典。
>>> t.__dict__ {‘name‘: ‘kebi‘, ‘age‘: 35} >>> vars(t) {‘name‘: ‘kebi‘, ‘age‘: 35} >>> vars() {‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <class ‘_frozen_importlib.BuiltinImporter‘>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ...
py15面向对象编程(代码片段)
新式类与经典类的区别python中类的发展?截止到python2.1,只存在旧式类。旧式类中,类名和type是无关的:如果x是一个旧式类,那么x.__class__定义了x的类名,但是type(x)总是返回<type‘instance‘>。这反映了所有的旧式类的实例是... 查看详情
day-9:面对对象高级编程
数据封装、继承和多态只是面向对象编程中最基础的3个概念。 下面整理面向对象高级编程的更为强大的技巧。 使用__slots__:Python属于动态语言,可以允许已创建好的类动态地绑定任何属性和方法。但是,给实例绑... 查看详情
面向对象编程(python)和部分面向对象高级编程
1.类和对象在python中定义类class类名(首字母最好大写)Student(Object(父类)): def__init__(self): self.属性1=参数1 self.属性2=参数2变量=Student(类名)s.属性1=‘字符串’__init__是一个特殊的函数用来初始化对象self执行当前类... 查看详情
ecma6--面向对象(代码片段)
面向对象是一种思维:由实际数据映射到程序中继承封装多态编程语言的发展史:汇编:01二进制,纸带打印,移植性差,难懂C语言(之前有A语言,B语言过时)C++(写起来也很难)java/object-c/javascript统称为高级开发语言编程思维... 查看详情
面向对象编程(代码片段)
对象:包含数据和操作数据的函数面向对象编程:把计算机程序视为一组对象的集合,每个对象可以接收其他对象的消息,并处理这些消息。类:抽象的概念(即包含数据,又包含操作数据的方法)实例:类中的具体对象classStud... 查看详情
面向对象编程(代码片段)
创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和“对象”来实现,所以,面向对象编程其实就是对“类”和“对象”的使用。类:就是一个模板,模板里可以包含多个函数,函数里实现一些... 查看详情
面向对象(代码片段)
面向对象:三大编程范式: 1面向过程编程:把一个大的问题细分成很多小问题,然后第一步执行到最后一步 2函数式编程: 通过对函数的创建和调用的方式 3面向对象编程: 通过创建一个有共同数据熟... 查看详情
学习pytbon第十七篇,面向对象编程
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方... 查看详情
面向对象
面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)什么是面向对象? 面向对象就是一种使用‘类‘和‘对象‘进行编程的编程方式. 类是一个模板,模板里可以包含多个函数,类中定义的这些函数称为方法,对象就... 查看详情
[py3]——面向对象编程
类的对象有三种对象可以做什么操作包括什么属性类对象属性引用、实例化函数方法、内置的属性、类变量实例对象属性引用函数方法、类变量、实例变量方法对象 1.类对象、实例对象、方法对象类[class]是抽象的模... 查看详情
[7]面向对象高级编程
[7]面向对象高级编程数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能。我们会讨论多重继承、定制类、元类等概念。使用__slots__正常情况... 查看详情
面向对象
1.基本概念面向对象是一种编程发方式,此编程方式是基于‘类’和‘对象’的使用类:是一个模版,模板种包装了多个‘函数’供使用(可以将多个函数共用的变量封装到对象中)对象:根据类创建的实例,实例用于调用包装... 查看详情
面向对象高级编程
1.多重继承1)在python中,一个类可以同时具备多种特性每种特性可以定义为一个类,通过类中的方法来表达特性,作为他的子类可以继承他的特性,并在此基础上面还具有自己的特性可以从其他继承类的方法中实现2)一个子类即... 查看详情
30.面向对象中常用内建函数与重载函数
内建函数:类中特殊功能__init__(self): ###为实例对象赋值 1,可以没有这个函数实例没数据 2,数据初始化函数 3,在实例化时,自动调用 4,init函数只能返回None  ... 查看详情
面向对象(初级篇)(代码片段)
一.面向对象代码如何编写面向对象编程需要使用"类"和"对象"来实现,面向对象编程就是对"类"和"对象"的使用类:就是一个模板,模板里可以包含多个函数,函数实现一些功能对象:就是根据模板创建的实例,通过实例对象可以执行类中... 查看详情
python面向对象-没有对象?new一个吧(代码片段)
文章目录面向对象编程概念(OOP)抽象类和实例封装/接口组合/包含派生/继承多态自省/反射属性和方法创建类创建对象实例方法(非静态成员函数)实例属性(非静态成员变量)类属性(静态成员变量)静态方法(静态成员函数)类方法属性... 查看详情
js面向对象编程:js类定义函数时prototype和this差别?
在面向对象编写js脚本时,定义实例方法主要有两种例如以下:functionListCommon2(afirst) { varfirst=afirst; this.do1=function() { alert("firstdo"+first); } } ListCommon2.prototype.do2=function() { //alert("fi 查看详情
python面向对象基础和高级复习(代码片段)
面向对象基础面向对象编程面向过程编程:类似于工厂的流水线优点:逻辑清晰缺点:扩展性差面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互优点:扩展性强缺点:逻辑非常复杂类与对象对象:... 查看详情