Python note

python 包,模块,类

 

 

 

 

self只有在类的方法中才会有,独立的函数或方法是不必带有self,非关键词

1 class Person:
2          def _init_(self,name):
3                   self.name=name
4          def sayhello(self):
5                   print 'My name is:',self.name
6 p=Person('Bill')
7 print p

 

install setuptools

第一步:下载setuptools压缩包(本人安装的Python版本是3.3,所以下载的是3.4.zip):https://pypi.python.org/packages/source/s/setuptools/
第二步:将下载的安装包解压缩:
第三步:把第一步中下载的zip包,原样拷到上面的这个目录下,如下图
第四步:在CMD下切换到此目录,并执行 python ez_setup.py,即可看到安装进程了!
说明: 如果直接执行 python ez_setup.py会包含在线下载文件的步骤,因为网络原因容易出现问题,以上的方案可以实现离线的安装。

 

________________________________________________________________

读前辈的笔记遇到个很坑的例子

A namespace is a mapping from names to objects

>>> class a:
    def __cmp__(self,other):
        if other > 0 : print 'other > 0' ;return -1
        elif other < 0 : print 'other < 0' ;return 1
        else : print 'other==0'; return 0

        
>>>
>>>
>>>
>>> o=a()
>>>
>>> if (o > 10) : print 'tt'

other > 0
>>> if (o < 10) : print 'tt'

other > 0
tt
>>>
>>>
>>>
>>>
>>> if (o > -10) : print 'tt'

other < 0
tt
>>> if (o < -10) : print 'tt'

other < 0

__cmp__ 中return的3个值 1,-1,0

执行过程(猜测):

1,根据other的值确定执行那一条,结果是返回1,-1,或0

2,判断返回值是否和表达式中的符号匹配,匹配返回True,不匹配返回False

############################################################

 >>> a=eg_class()

OK,I was born
>>> Eg_class=eg_class
>>> b=Eg_class()
OK,I was born
>>> a
<__main__.eg_class instance at 0x0000000002E09EC8>
>>> b
<__main__.eg_class instance at 0x0000000002E0F9C8> // class seems like stucture

object == class instance

name space is the mapping of name and object 

>>> a.new_att='a' or setattr(obj,"new_attribute",other)

>>> a.__dict__     //name spaces of a
{'new_att': 'a'}

>>> a.__dict__.keys()   //name list
['new_att']

>>> a.__dict__['new_att']
'a'

>>> del a.new_att  //...

>>> hasattr(a,'new_att')
True

>>> dir(a)
['__doc__', '__init__', '__module__', 'new_att'] //list attribute of a 

 

>>> vars(a)

{'new_att': 'a'}
>>> dir(a)
['__doc__', '__init__', '__module__', 'new_att']  // attribute not must in its name spaces
>>>

"*.py" create a moudle object

>>> class eg_c:
def __init__(self):
print "class eg_c born"
a='a'


>>> class Eg_c(eg_c):   //继承
def __init__(self):
print "class Eg_c born"


>>> dir(eg_c)
['__doc__', '__init__', '__module__', 'a']
>>> dir(Eg_c)
['__doc__', '__init__', '__module__', 'a']
>>> Eg_c.a
'a'

every class instance has obj.__class__ point to the class objetct

>>> class A:
... count = 0
... def __init__(self):
... self.__class__.count= self.__class__.count + 1

 

class A:
readonlyValue=100
def __setattr__(self,attr,value):
if attr=="readonlyValue":
raise "can not change the readonly value"

a.readonlyValue = 102 //赋值会调用setaddr a=self attr=readonlyValue value=102

-------------------------------------------------------

getattr 类重载

class B:
def printMe(self):
print "I am B"
def printOk(self):
print "B say:OK"

class A:

__realobj__ = B()
def __getattr__(self,attr):
return getattr(self.__realobj__,attr)
def printMe(self):
print "I am A"

if __name__ =="__main__":
a=A()
a.__realobj__ = B() 
a.printMe()     
a.printOk() //本身没有printOK attr

------------------------------------------------------

setaddr 动态增加attr

class eg_c:

def __init__(self,**kws):
for k,v in kws.items():
setattr(self,k,v)

a=eg_c(five=5,six=6)

>>> vars(a)   //{'six': 6, 'five': 5}

>>> d={"one":1,"two":2,"three":3}
>>> d.items()
[('three', 3), ('two', 2), ('one', 1)]

>>> for k,v in d.items():
setattr(a,k,v)

>>> vars(a)
{'one': 1, 'six': 6, 'five': 5, 'three': 3, 'two': 2}

>>> for k,v in vars(a).items(): // one:1 ...
print "%10s:%s" % (k,v)

 

posted @ 2014-09-19 17:48  voh99800  阅读(215)  评论(0编辑  收藏  举报