类属性property
作用:
property可以定义一个方法名为私有属性的名字, 让用户可以访问, 但不能修改, 保护数据的
安全性;
属性名.setter在给属性赋值时, 先做判断;
属性名.deleter使用内置del删除属性时,自动执行的内容;
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
student1 = Student("one", 111)
print student1.name
print student1.__score
查看方法
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
student1 = Student("one", 111)
print student1.name
print student1._Student__score
property应用: 信息分页显示
主机信息有很多, 为了美观, 分页显示;
当用户选择第n页, 显示该页需要的数据从哪条开始, 哪条结束;
将start, end返回给后端, 将需要的数据响应给前端;
class Student(object):
def __init__(self, name, age, score):
self.name = name
self.__age = age
self.__score = score
@property
def age(self):
return self.__age
student1 = Student("one", 11, 111)
print student1.age
私有成员和共有成员
私有属性/方法: 类内部可以访问, 对象不能访问; 子类不能访问, 子类的对象不能访问;
共有属性/方法: 私有属性可以访问和不可以访问的, 都可以访问;
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
def __judge(self):
if 0 <= self.__score <= 100:
print "Y"
else:
print "N"
student1 = Student("one", 111)
print student1.name
print student1._Student__score
student1._Student__judge()
改变类的字符串显示 str 和 repr
str : 当打印对象时自动调用;
repr : 当在交互式环境中, 直接输入对象时, 自动调用;
如果 str 没有定义时, 那么打印对象自动调用 repr ;
功能: 简化脚本测试和调试时的实例输出;
class Student(object):
def __init__(self, name, sid):
self.__name = name
self.__sid = sid
def __str__(self):
return "Student(%s)" %(self.__name)
def __repr__(self):
return "<%s %s>" %(self.__name, self.__sid)
if __name__ == "__main__":
s = Student("westos", 001)
print s
s
In [3]: import duixiang
In [4]: s = dui
duixiang duixiang.py duixiang.pyc
In [4]: s = duixiang.Student("python", "110")
In [5]: s
Out[5]: <python 110>
自定义字符串的格式
format
_riqi = {
'nyr' : '{d.year}-{d.month}-{d.day}',
'yrn' : '{d.month}/{d.day}/{d.year}',
'ryn' : '{d.day}:{d.month}:{d.year}',
}
class Date(object):
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def __format__(self, code):
if code == '':
code = 'nyr'
fmt = _riqi[code]
return fmt.format(d=self)
d = Date(2018,1,9)
print format(d)
print format(d,'ryn')
print format(d,'yrn')
索引: getitem 和 setitem 和 delitem
class Student(object):
def __init__(self, name):
self.name = name
def __getitem__(self, item):
print "__getitem__",item
def __setitem__(self, key, value):
print "__setitem__", key, value
def __delitem__(self, key):
print "__delitem__", key
s = Student("van")
print s['name']
name =s['name']
s['name'] = 'one'
del s['name']
切片: getslice 和 __setslice 和delslice
class Student(object):
def __init__(self,name, age):
self.name = name
self.__age = age
def __getslice__(self, i, j):
print "get", i, j
def __setslice__(self, i, j, item):
print "set", i, j, item
def __delslice__(self, i, j):
print "del", i, j
s = Student("van", 122)
s[0:3]
s[0:3] = [3,9,0]
del s[0:3]
迭代 iter
class Student(object):
def __init__(self, name):
self.name = name
self.scores = [5,31,22]
def add_score(self, score):
self.scores.append(score)
def __iter__(self):
return iter(self.scores)
s = Student("lalal")
s.add_score(97)
print s.scores
from collections import Iterable
print isinstance(s, Iterable)
for i in s:
print i
元类(‘type’)
在python中,一切皆对象; Linux下一切皆文件;
class Student(object):
print 'ccc'
s = Student()
print type(s)
print type(Student)
动态的创建类
def choose(name):
if name == 'ch':
class CS(object):
pass
return CS
else:
class MS(object):
pass
return MS
myclass = choose('ch')
print myclass
type动态创建类
type(对象)
type(类名, 元组方式存储父类,属性 )
def choose(name):
if name == 'ch':
class CS(object):
pass
return CS
else:
class MS(object):
pass
return MS
myclass = choose('ch')
print myclass