-
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
class Person(object): def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth
__init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。
查看全部 -
在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类如下:
class Person(object): pass
按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。类的继承将在后面的章节讲解,现在我们只需要简单地从object类继承。
有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建:
xiaoming = Person() xiaohong = Person()
查看全部 -
try: from cStringIO import StringIO except ImportError: from StringIO import StringIO
try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句。
查看全部 -
如果使用 from...import 导入 log 函数, 势必引起冲突。这时, 可以给函数起个“别名”来避免冲突 from logging import log as logger
查看全部 -
__call__
作用:使类可以直接像函数一样被使用。
代码:
class Fib(object):
def __init__(self):
self.t=[0,1]
def __call__(self,friend):
for i in range(2,friend):
self.t.append(self.t[i-1]+self.t[i-2])
return self.t
f = Fib()
print f(10)
查看全部 -
__slots__
作用:限制实例中属性的任意添加。(由于Python是动态语言,任何实例在运行期都可以动态地添加属性。)
例:
class Student(object): __slots__ = ('name', 'gender', 'score') def __init__(self, name, gender, score): self.name = name self.gender = gender self.score = score
>>>s = Student('Bob', 'male', 59) >>> s.name = 'Tim' # OK >>> s.score = 99 # OK >>> s.grade = 'A'(无法添加,被限制)
查看全部 -
@property对输出加以修饰或判断(检查属性的有效性)。
如:
def get_score(self): return self.__score def set_score(self, score): if score < 0 or score > 100: raise ValueError('invalid score') self.__score = score s.self_score(s) s.self_score()
但想需要更简单点,直接些s.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
查看全部 -
__int__(self): 转化为下取整整数。
__float__(self): 转化为浮点数。
p//q: 指相除后下取整整数。
例:
def __int__(self):
return self.p // self.q
def __float__(self):
return self.p*1.0/self.q
print int(Rational(7, 2))
print float(Rational(1, 3))
查看全部 -
__add__(): 加,__sub__(): 减,__mul__(): 乘,__div__(): 除。
具体操作代码:
def __add__(self, r): return Rational(self.p * r.q + self.q * r.p, self.q * r.q) def __str__(self): return '%s/%s' % (self.p, self.q) __repr__ = __str__
>>> r1 = Rational(1, 3) >>> r2 = Rational(1, 2) >>> print r1 + r2 5/6
查看全部 -
__len__(): 返回该类实例的“长度”。
例:
class Fib(object):
def __init__(self, num):
self.num=num
self.t = [0,1]
for i in range(2,self.num):
self.t.append(self.t[i-1] + self.t[i-2])
def __str__(self):
return str(self.t)
def __len__(self):
return len(self.t)
f = Fib(10)
print f
print len(f)
查看全部 -
sorted(L) == sorted(L,__cmp__)
例:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def __str__(self):
return '(%s: %s)' % (self.name, self.score)
__repr__ = __str__
def __cmp__(self, s):
if self.score >s.score:
return -1
elif self.score <s.score:
return 1
else:
if self.name >s.name:
return 1
else:
return -1
# return -cmp(self.score, s.score) or cmp(self.name, s.name)
L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
print sorted(L)
查看全部 -
特殊方法:
print s == print s.__str__()
__str__()用于显示给用户,而__repr__()用于显示给开发人员。
查看全部 -
type(s): 返回s的类型
例:
>>> type(123) <type 'int'>
dir(s): 返回有关的所有属性。
例:
>>> dir(s) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'gender', 'name', 'score', 'whoAmI']
getattr(s,'name',) ==s.name
setattr(s,'name','Adam') == s.name='Adam'
getattr(s,'name','Adam') == 如果s.name存在,输出;不存在,输出默认值'Adam'。
查看全部 -
isinstance()也可以用来判断类的类型
查看全部 -
继承实例:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher,self).__init__(name,gender)
self.course=course
查看全部
举报