-
要定义关键字参数,使用 **kw;
除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
python中的args和kw:
*args
:表示就是将实参中按照位置传值,多余的值都给args,且以元组的方式呈现**kw
:表示就是形参中按照关键字传值,多余的值都给kw,且以字典*的方式呈现查看全部 -
使用 get/set 方法来封装对一个属性的访问在许多面向对象编程的语言中都很常见。
在函数式编程中我们介绍了装饰器函数,可以用装饰器函数把 get/set 方法“装饰”成属性调用:
class Student(object): def __init__(self, name, score): self.name = name self.__score = score @property def score(self): return self.__score @score.setter def score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score
注意: 第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
就可以像使用属性一样设置score了:
>>> s = Student('Bob', 59) >>> s.score = 60 >>> print s.score 60 >>> s.score = 1000 Traceback (most recent call last): ... ValueError: invalid score
说明对 score 赋值实际调用的是 set方法。
查看全部 -
#取公约数方法,传入有理数a/b,递归函数 def gcd(a, b): if b == 0: return a return gcd(b, a % b)
查看全部 -
self.p*r.q + self.q*r.p, self.q*r.q) # Rational有理数相加法 有理数可以看成是分子与分母都是整数的数,所有两个有理数相加,要把分母变成一样的,再相加分子
查看全部 -
需要根据num计算出斐波那契数列的前N个元素。
class Fib(object): def __init__(self, num): a, b, L = 0, 1, [] for n in range(num): L.append(a) a, b = b, a + b self.numbers = L def __str__(self): return str(self.numbers) __repr__ = __str__ def __len__(self): return len(self.numbers) f = Fib(10) print f print len(f)
查看全部 -
print语句会自动调用__str__() 方法
__repr__是指在没有调用外部函数时,开发人员也能够读取信息print打印会调用__str__,而直接输入变量名则调用__repr__
偷懒定义__repr__的方法:
__repr__ = __str__
查看全部 -
可接受任意关键字参数,并把他们都作为属性赋值给实例
class Person(object):
def __init__(self, name, gender, birth, **kw):
self.name = name
self.gender = birth
self.birth = birth
for k, v in kw.iteritems(): # key, value
setattr(self, k, v) # setattr(self, 'name', 'xxx')设置属性
查看全部 -
isinstance(s, object) 判断它是否是某种类型的实例
type() 函数获取变量的类型,返回一个 Type 对象
dir() 函数获取变量的所有属性
>>> dir(123) # 整数也有很多属性...['__abs__', '__add__', '__and__', '__class__', '__cmp__', ..
dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要 getattr() 和 setattr( )函数
>>> getattr(s, 'name') # 获取name属性'Bob' >>> setattr(s, 'name', 'Adam') # 设置新的name属性>>> s.name 'Adam' >>> getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20 setattr(self, k, v)
查看全部 -
def ss(s1): return s1.lower()print sorted(['bob', 'about', 'Zoo', 'Credit'], key=ss)
查看全部 -
filter()按前定义函数去除list中不符合条件的部分。math.sqrt(x)%1==0
查看全部 -
reduce函数,2个值间操作,第三值为默认值。
查看全部 -
Python提供了open()函数来打开一个磁盘文件,并返回 File 对象。File对象有一个read()方法可以读取文件内容:
例如,从文件读取内容并解析为JSON结果:
import json f = open('/path/to/file.json', 'r') print json.load(f)
由于Python的动态特性,json.load()并不一定要从一个File对象读取内容。任何对象,只要有read()方法,就称为File-like Object,都可以传给json.load()。
请尝试编写一个File-like Object,把一个字符串 r'["Tim", "Bob", "Alice"]'包装成 File-like Object 并由 json.load() 解析。
查看全部 -
Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。
要创建多进程模式的 TCPServer:
class MyTCPServer(TCPServer, ForkingMixin) pass
要创建多线程模式的 UDPServer:
class MyUDPServer(UDPServer, ThreadingMixin): pass
查看全部 -
当实例属性和类属性重名时,实例属性优先级高。
查看全部 -
实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。当类属性改变时,所有实例访问到的类属性都改变了。
查看全部
举报