导航:首页 > 编程语言 > pythonclassobj

pythonclassobj

发布时间:2022-08-15 04:56:56

‘壹’ python内建函数

其实安装python包会自带一个有问号标示“?”的"Python Manuals"可以仔细阅读一下,也可作帮助文档的。

介绍Python的内建函数和异常.许多内建函数的细节及特性可以在这里找到.

内建函数

本节介绍的函数在解释器中总是可用的,他们被包含在 __builtin__ 模块里.另外每个模块的 __builtins__ 属性经常指的是这个模块(除了当在restricted execution环境下运行时).

_(下划线)

默认情况下,变量 _ 用于在交互模式下表示最近一个表达式的运行结果.

参阅 sys.displayhook (118)

__import__(name [, globals [, locals [, fromlist]]])

import语句通过调用这个函数来导入模块. name是包含模块名字的字符串, globals是一个可选的定义全局名称空间的字典, locals是定义局部名称空间的字典, fromlist是from语句目标的列表.例如, import spam语句会调用__import__('spam', globals(), locals(), []) ,而from spam import foo 语句会调用 __import__('spam', globals(), locals(), ['foo']). 如果模块名在包名字之后(如foo.bar)而且fromlist为空时,就返回对应的模块对象.如果fromlist不为空,则只会返回最顶级的包.

这个函数是一个低等级的模块载入接口.它并不执行import语句的所有步骤(通常情况下局部名称空间并不会随模块中包含对象的名称引用的改变而改变.这个函数可以由用户来重新定义,这样为import语句加入新的行为.默认的执行并不会检查locals参数,而globals只用于决定包的内容(这些参数可以使 __import__()能够完整地访问全局和局部名称空间)

abs(x)
返回x的绝对值

apply(func [, args [, keywords]])
对可调用对象func执行函数调用. args是一个包含固定位置参数的元组, keywords是包含关键参数的字典. apply()函数也可以写做func(*args ,**keywords ).

buffer(sequence [, offset [, size]])
创建一个新的缓冲器对象.缓冲器通常是一个序列(如字符串)的字节导向序列.缓冲器和字符串在许多地方是相同的,但是它不支持字符串方法,而且也不能使用string模块的函数.

callable(object)
当object为可调用对象时返回True,否则返回False

chr(i)
将一个0到255的整数转换为一个字符.

cmp(x,y)
比较x和y. x< y返回负数; x== y返回零; x> y返回整数.它可以比较任意两个对象并返回结果,即使有时候对象的比较豪无意义(例如比较文件对象).在某些环境下,这样的比较会引发异常.

coerce(x,y)
将x和y值转换为同一个数值类型并作为一个元组返回.(第三章,类型和对象)

compile(string, filename, kind)
使用exec()或eval()将字符串编译为代码对象. filename is a string containing the name of the file in which the string was defined. kind为'exec'时代表一个表达式的序列, 'eval'代表一个表达式, 'single'代表一个运行语句.

complex(real [, imag])
创建一个复数

delattr(object, attr)
删除对象的一个属性, attr是一个字符串.与 del object.attr相同

dir([object])
返回包含属性名称的列表.它们来自对象的 __dict__, __methods__,以及 __members__ 属性.如果没有传递给它参数,则会返回当前的local symbol table

divmod(a,b)
返回一个包含商和余数的元组.对于整数,将返回(a / b , a % b ),对于浮点数,将返回(math.floor(a / b ), a % b )

eval(expr [, globals [, locals]])
计算一个表达式的值. expr是一个字符串或由compile()创建的一个代码对象. globals和locals为操作定义的全局和局部名称空间,当省略时,表达式将在调用时的名称空间计算.

execfile(filename [, globals [, locals]])
运行文件filename中的语句. globals和locals定义了文件运行的全局和局部名称空间,当省略时,文件将在调用时的名称空间运行.这个函数不能在一个函数主体里使用,因为它与内嵌范围不相容.

filter(function, list)
使用func()函数来过滤s中的元素.使func返回值为false的元素被丢弃,其它的存入filter函数返回的列表中.如果function是None,则list中值为False的元素就被删除.

float(x)
将x转换为浮点数

getattr(object, name [, default])
返回一个对象的属性. name是一个字符串. default是一个可选的值,代表当没有这个属性时返回的值. 与 object.name 结果相同

globals()
返回一个与全局名称空间对应的字典

hasattr(object, name)
返回object是否有name属性,布尔值

hash(object)
返回一个对象的整数哈希值(如果可能).两个相等对象的哈希值是相同的.模块没有定义一个哈希值.

hex(x)
将一个整数或长整数转换为一个十六进制的字符串

id(object)
返回一个对象的整数id

input([prompt])
相当于eval(raw_input(prompt ))

int(x [, base])
将一个数字或字符串转换为整数. 可选参数base代表从字符串转换时的基础/根据

intern(string)
Checks to see whether string is contained in an internal table of strings. If found, a of the internal string is returned. If not, string is added to the internal table and returned. This function is primarily used to get better performance in operations involving dictionary lookups. Interned strings are never garbage-collected. Not applicable to Unicode strings.

isinstance(object, classobj)
检查object是否是classobj的事例或子类.也可用于检查类型

issubclass(class1, class2)
检查class1是否是class2的子类(派生类)
注意: issubclass(A , A )返回True

len(s)
返回序列s中包含的条目数目

list(s)
返回一个包含序列s中条目的新列表

locals()
返回一个与调用时局部名称空间相对应的字典

long(x [, base])
将一个数字或字符串转换为长整数,可选参数base代表从字符串转换时的基础/根据

map(function, list, ...)
将序列list中的每个元素传递给function函数做参数,函数的返回值组成列表并返回.如果提供给多个列表,则函数应包含有多个参数,每个参数从不同的列表获得.如果函数为None,则默认为 identity function(?身份函数).如果None映射到多个列表,则返回一个包含元组的列表,元组的每个元素分别来自各个列表.如果有必要,短的列表将使用None来扩充到与最长列表长度相等. map可以使用list comprehensions 来代替.例如map(function , alist ),可以使用[function (x) for x in alist ]来代替
参阅 zip (105).

max(s [, args, ...])
单个参数时,返回序列s中的最大值.多个参数时,返回值最大的参数

min(s [, args, ...])
单个参数时,返回序列s中的最小值.多个参数时,返回值最小的参数

oct(x)
将一个整数或者长整数转换为八进制字符串

open(filename [, mode [, bufsize]])
打开文件filename并返回一个文件对象(第十章,运行环境). mode代表文件打开的模式. 'r' 表示读, 'w' 表示写, 'a' 表示在文件末尾添加内容. 还有一种更新模式,你只要在读写模式后增加一个'+'就可以使用这种模式,如'r+' 或 'w+'.当一个文件以更新模式打开,你就可以对这个文件进行读写操作.只要在任何读取操作之前刷新所有的输出缓冲就不会有问题.如果一个文件以 'w+' 模式打开,它的长度就度截为 0.当mode省略时,将会使用'w'模式.bufsize参数指定了缓冲行为, 0代表无缓冲,1代表行缓冲,其他正数代表一个大约的字节缓冲器大小,负数代表使用系统默认缓冲器大小(也是默认行为)

ord(c)
返回单个字符c的整数顺序值.普通字符返回[0,255]中的一个值,Unicode字符返回 [0,65535]中的一个值

pow(x, y [, z])
返回x ** y ,如果z存在返回(x ** y ) % z

range([start,] stop [, step])
返回一个从start到stop的整数序列, step代表步进,默认值为1. start默认值为0.负数的step可以创建一个递减的整数序列
参阅xrange (105)

raw_input([prompt])
从标准输入(sys.stdin)中读取一行,并把它作为字符串返回.如果提供了prompt,它将首先打印到标准输出(sys.stdout).当读取到一个EOF时,就会引发一个EOFError异常.如果readline模块被导入,那么这个函数会使用它来提供更高级的功能

rece(func, seq [, initializer])
函数从一个序列收集信息,然后只返回一个值(例如求和,最大值,等).它首先以序列的前两个元素调用函数,再将返回值和第三个参数作为参数调用函数,依次执行下去,返回最终的值. func函数有且只有两个参数.在seq为空时,将使用初始值initializer.

reload(mole)
重新导入一个已经导入的模块. mole必须是一个已经存在的模块对象.一般情况下并不鼓励使用这个函数,除了在调试的时候.
当一个模块重导入时,定义它的全局名称空间的字典依然存在.Thus, definitions in the old mole that aren’t part of the newly reloaded mole are retained.模块可以利用这个来检查他们是否已经被导入.
重导入一个使用C编写的模块通常是不合法的
If any other moles have imported this mole by using the from statement, they’ll continue to use the definitions in the previously imported mole. This problem can be avoided by either reissuing the from statement after a mole has been reloaded or using fully qualified names such as mole.name .
如果有使用以前模块中类创建的实例,它们将继续使用以前的模块

repr(object)
返回一个对象的标准字符串表示.与向后的引号 `object` 相同.大多数情况下,返回的字符串可以使用eval()来再次创建这个对象.

round(x [, n])
Returns the result of rounding the floating-point number x to the closest multiple of 10 to the power minus n . If n is omitted, it defaults to 0. If two multiples are equally close, rounding is done away from 0 (例如, 0.5 is rounded to 1.0 and -0.5 is rounded to -1.0).

setattr(object, name, value)
设置一个对象的属性. name是一个字符串. 相当于object.name = value .

slice([start,] stop [, step])
返回一个代表指定数列中一个整数的切片对象.切片对象也可以有扩展切片操作语句来产生.(第三章,序列和映射方法)

str(object)
返回表示对象的可打印形式的字符串.与print语句产生的字符串相同.

tuple(s)
从序列s中创建一个元组.如果s已经是一个元组,则返回s

type(object)
返回object的类型,它是一个types模块中定义type类型
参阅isinstance (102)

unichr(i)
将一个0到65535的整数转换为一个Unicode字符

unicode(string [, encoding [, errors]])
将string转换为Unicode字符串. encoding指定了string的数据编码,它被省略时,将使用sys.getdefaultencoding(). errors指定编码错误处理方式.('strict', 'ignore', 或 'replace' .参阅第三章和第九章中有关Unicode内容)

vars([object])
返回object的 symbol table (通常在object的__dict__属性).如果没有给它提供参数,则返回对应当前局部名称空间的字典.

xrange([start,] stop [, step])
和range函数相似,但返回的是一个XRangeType对象.它生成一个迭代器,就是只有用那个数时才临时通过计算提供值,而不是全部储存它们.这样在处理大的数列时能节省大量的内存.

zip(s1 [, s2 [,..]])
用来将几个序列组合成一个包含元组的序列,序列中的每个元素t[i ] = (s1[i ], s2[i ], ..., sn[i ]).结果与最短序列的长度相等.

‘贰’ python中type()函数的问题

在2.6.7下运行上面的代码的显示结果:
Python 2.6.7 (r267:88850, Jul 10 2011, 09:55:27)
[GCC 4.6.1] on linux2
Type "right", "credits" or "license()" for more information.

****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************

IDLE 2.6.7 ==== No Subprocess ====
>>> class Foo:pass
>>> foo=Foo()
>>> type(Foo)
<type 'classobj'>
>>> type(foo)
<type 'instance'>
>>>
>>> class Bar(object):pass
>>> bar=Bar()
>>> type(Bar)
<type 'type'>
>>> type(bar)
<class '__main__.Bar'>
>>>
在3.2.1下运行上面的代码的显示结果:
Python 3.2.1rc1 (default, May 18 2011, 18:34:29)
[GCC 4.6.1 20110507 (prerelease)] on linux2
Type "right", "credits" or "license()" for more information.
==== No Subprocess ====
>>> class Foo:pass
>>> foo=Foo()
>>> type(Foo)
<class 'type'>
>>> type(foo)
<class '__main__.Foo'>
>>>
>>> class Bar(object):pass

>>> bar=Bar()
>>> type(Bar)
<class 'type'>
>>> type(bar)
<class '__main__.Bar'>
>>>

估计,你使用的是Python2.6或2.7的版本。
原因很简单(你要是看过Python3.X的语法规则就会明白了):在2.X系统中,Python的类继承机制在默认与不默认上是不一样。在Python3.X中,所有的类都继承自object类,也就是说,object类在3.X中是所有类的父类;在编写自定义的类时,如果不明写出父类,那么Python3.X就默认为继承自object类。但在2.X中,却是不一样的,如果不明写出父类,它不会默认为object,也就是说你必须要明确告诉Python才行。这也就是为什么在2.X中写不写object的不同。

个人认为:Python2.X中的语法太杂、混乱,有中说不上来的感觉,没有3.X中的规整。3.X中比较清晰、统一。但是就目前在运行效率上,3.X还是比不上2.X,不过社区在将来可能会有所改善。建议直接学习3.X,原因很明显:3.X语法规整、清晰,而且在将来3.X必将会代替2.X;2.6或2.7只不过是个向3.X的过渡版本,原因是有很多程序是2.X下,并且3.X为了避免累赘,没有向下兼容!

‘叁’ Python 为什么要继承 object 类

继承 object 类的是新式类,不继承 object 类的是经典类
2.2以前的时候type和object还不统一. 在2.2统一以后到3之间, 要用class Foo(object)来申明新式类, 因为他的type是 < type 'type' > .不然的话, 生成的类的type就是 < type 'classobj' >
Python2 里的新式类, 其特点如下:

low-level constructors named __new__() – 低级别的构造函数.
Note: Python 的 class __init__ 并不是其他语言意义上的构造函数,
在 new 创建实例后对实例属性初始化的函数.
descriptors, a generalized way to customize attribute access – 描述符.
或者说描述符协议支持.descriptor protocol __get__, __set__ ,__delete__ 等,
可以阅读 descriptor 文档
static methods and class methods - 静态方法和类方法
properties (computed attributes) – 属性访问 setter getter.
decorators (introced in Python 2.4) – 装饰器.
现在装饰器语法糖遍布各Python框架.
slots – 用户设置后可以限定实例的属性.
在 Python2 中替代 __dict__, 可以节省近 2/3 内存, Python3 中可以
不因为优化内存使用率而使用 slots, 因为 __dict__ 结构内存做了优化,
Note: __dict__ 并不是 Python 意义上的内置的 dict, 其实是一个 proxy 类.
a new Method Resolution Order (MRO) – MRO 方法解析次序改变
(由左递归改为C3算法)

‘肆’ Python 为什么要继承 object 类

1.使用 Python 时, 遇到 class A 和 class A(object) 的写法,在 Py2 中是有概念上和功能上的区别的, 分别称为经典类(旧式类)old-style(classic-style) 与新式类的区别new-style。
2.历史原因:.2.2以前的时候type和object还不统一. 在2.2统一到3之间, 要用class Foo(object)来申明新式类, 因为它的type是 < type ‘type’ > .不然的话, 生成的类的type就是 < type ‘classobj’ >
3.为什么要继承object类?主要目的是便于统一操作。在python 3.X中已经默认继承object类

‘伍’ Python 如何区分对象和函数

函数就是一个callable的对象,所有对象只要你实现了它的call方法就跟函数一样

‘陆’ Python:报错类型是typeerror:must be str not int,求解答

第一关于

super().__init__()

这种不指定子类的继承方法是在Python 3中新加入的,因为你使用的是Python 2, 所以会报错。


第二,关于TypeError,请题主在定义两个父类的时候加入他们的父类(object),如下,再尝试一次,因为Python 2中的classobj不算做一种type,如果你用Python 3的话应该就没有这种问题了。
classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(object):
def__init__(self):
print"我是Base2"



另外一点题外话,题主对Base这个子类采用了双重继承,即此子类同时拥有两个父类(Base1和Base2),这种继承方法有时容易造成混乱,即如果两个父类有相同的方法名或变量名时,无法确定应继承哪一个。因此在诸如Java等语言中多重继承是不允许的。Python允许多重继承,但在这种情况下为了避免混乱,Python会自动按顺序选择拥有所需方法名的第一个父类并执行,而忽略其他父类中的同名方法。比如你的
classBase(Base1,Base2):
def__init__(self):
super(Base,self).__init__()

中,使用
super(Base,self).__init__()

来呼叫Base父类的__init__方法,由于Base的父类有两个(Base1和Base2),并且两个都有__init__方法,所以Python默认只按顺序呼叫Base1的__init__方法而忽略Base2的。这样你运行
bbbb=Base()

时就只会显示
我是Base1

而不会显示“我是Base2”。如果你要使用super()方法并希望像使用
classBase(Base1,Base2):
def__init__(self):
Base1.__init__(self)
Base2.__init__(self)

时一样同时输出“我是Base1”和“我是Base2”的话,你需要修改代码使Base2为Base1的子类,Base为Base2的子类才可以。如下:
classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(Base1):
def__init__(self):
super(Base2,self).__init__()
print"我是Base2"

classBase(Base2):
def__init__(self):
super(Base,self).__init__()

这样你运行

bbbb=Base()

时才会输出

我是Base1
我是Base2

‘柒’ python 中的type

<class 'type'> 指的是 是一种 class 类型。

<class '__main__.bar'> 指的是 是class bar 的一个instance

参照python2.7
>>> class bar:pass

>>> b=bar()
>>> type(bar)
<type 'classobj'>
>>> type(b)
<type 'instance'>
>>>

‘捌’ C++导入python总是返回空,求助

假设我现在需要写这样一个py文件
import os
import cookielib
class MyTest(object):
def __init__(self):
self.cj = cookielib.LWPCookieJar()
print 'MyTest'
def myGetPath(self):
print os.getcwd()
如前所述,我通过在C++里写上PyImport_AddMole("cookielib"),PyImport_ImportMole("testpy");这一步可以通过,但是当我想构造这样一个类的实例时,出错,省略了部分代码
PyObject* pClass = PyDict_GetItemString(pDict,MyTest);
PyObject* pClassObj = PyInstance_New(pClass,NULL,NULL);
pClass有效,但PyInstance_New构造出的对象为空
我试过,无论是否去掉import cookielib,注释掉self.cj那句,都无法构造,如果把(object)去掉,直接写成class MyTest:在import cookielib打开,self.cj这句关闭的时候,ok,可以构造,

‘玖’ Python 中的 classmethod 和 staticmethod 有什么具体用途

classmethod:类方法staticmethod:静态方法
在python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:
@classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例。
普通对象方法至少需要一个self参数,代表类对象实例
类方法有类变量cls传入,从而可以用cls做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类。 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用,就像C().f(),这里C(),写成这样之后它就是类的一个实例了。
静态方法则没有,它基本上跟一个全局函数相同,一般来说用的很少
Example 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

>>> class a():
@staticmethod
def staticm():
print 'static'
def normalm(self):
print 'nomarl',self
@classmethod
def classm(cls):
print 'class',cls

>>> a1=a()
>>> a1.normalm()
nomarl <__main__.a instance at 0x84dddec>
>>> a1.staticm()
static
>>> a1.classm()
class __main__.a
>>> type(a)
<type 'classobj'>
>>> type(a1)
<type 'instance'>

Example 2:

class A(object):
@classmethod
def cm(cls):
print '类方法cm(cls)调用者:', cls.__name__
@staticmethod
def sm():
print '静态方法sm()被调用'
class B(A):
pass
A.cm()
B.cm()
A.sm()
B.sm()
输出:
类方法cm(cls)调用者: A
类方法cm(cls)调用者: B
静态方法sm()被调用
静态方法sm()被调用

@classmethod与@staticmethod的应用实例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class TClassStatic(object):
obj_num = 0
def __init__(self, data):
self.data = data
TClassStatic.obj_num += 1
def printself(self):
print("self.data: ", self.data)
@staticmethod
def smethod():
print("the number of obj is : ", TClassStatic.obj_num)
@classmethod
def cmethod(cls):
print("cmethod : ", cls.obj_num)
cls.smethod()
def main():
objA = TClassStatic(10)
objB = TClassStatic(12)
objB.printself()
objA.smethod()
objB.cmethod()
print("------------------------------")
TClassStatic.smethod()
TClassStatic.cmethod()
if __name__ == "__main__":
main()

输出结果如下:

('self.data: ', 12)
('the number of obj is : ', 2)
('cmethod : ', 2)
('the number of obj is : ', 2)
------------------------------
('the number of obj is : ', 2)
('cmethod : ', 2)
('the number of obj is : ', 2)

阅读全文

与pythonclassobj相关的资料

热点内容
解压新奇特视频 浏览:702
图书信息管理系统java 浏览:548
各种直线命令详解 浏览:859
程序员泪奔 浏览:143
素材怎么上传到服务器 浏览:513
android百度离线地图开发 浏览:187
web可视化编程软件 浏览:288
java笔试编程题 浏览:742
win11什么时候可以装安卓 浏览:560
java不写this 浏览:999
云点播电影网php源码 浏览:95
pythonclass使用方法 浏览:226
移动加密软件去哪下载 浏览:294
php弹出alert 浏览:209
吉林文档课件加密费用 浏览:136
传感器pdf下载 浏览:289
随车拍app绑定什么设备 浏览:898
方维团购系统源码 浏览:993
linux反弹shell 浏览:159
打印机接口加密狗还能用吗 浏览:301