1 __slots__函数 限制只有定义的这些属性才可以动态添加
# 限制只有定义的这些属性才可以动态添加
# 以元组的方式定义能给对象添加的属性,除此之外的属性不能添加,对动态添加属性可以做出一些限制
class Er(object):
def __init__(self,name,age,):
self.name = name
self.age = age
#self.weight = weight
__slots__ = ('name','age')
p1 = Er('张三',21)
# p1.weight = 80
print(p1.name)
p1.name = 'lis'
print(p1.name)
#张三
lis
2 类函数和静态函数
# 类函数
# 装饰器是以@ 开头 @结构的称之为语法糖,装饰器的作用就是给一些现有的函数增加一些额外功能
class Peopel(object):
def __init__(self,name,age):
#调用父类初始化函数
super(Peopel, self).__init__()
#初始化当前类对象的一些属性
self.name = name
self.age = age
@classmethod
def work(cls,time,*args,**args)
print(cls)
#静态函数
#@staticmethod 描述的函数成为静态函数,静态函数没有隐形参数
@staticmethod
def run(time):
print('跑步%s'%time)
# 调用类函数可以有类直接调用,也可以对象调用
# 但是cls 类调用时就是该类,对象调用的时候就是该对象的类型
p1 = People('张三',23)
p1.work(10)
People.work(20)
p1.run(5)
People.run
3 利用类函数 举例文件处理系统
1
isinstance(x, A_tuple)判断 x 类型 A_tuple 是类型 int(整数),str(字符串) # 判断是A_tuple类型 返回True
'''
# 文件处理类
# 1添加保存数据
# 1.1添加数据类型是以字符串
# 判断数据类型是不是字符串
# 1.2 添加数据类型是列表
# 判断数据类型是不是字符串
'''
'a'
class FileManager(object):
file_num = 'student.txt'
@classmethod
def write_num(cls,content,split='\n'):
'''
:param content: 判断要写入的数据
:param split: 打开文件,写入,写入换行符
:return: 关闭文件
'''
# isinstance(x, A_tuple)判断 x 类型 A_tuple 是类型 int(整数),str(字符串)
# 判断是A_tuple类型 返回True
if isinstance(content,str) ==True:
s = open(cls.file_num,'a')
s.write(content)
s.write(split)
s.close()
else:
raise TypeError('content muse be a str')
# 写入的数据是一个列表
@classmethod
def writerline_num(cls,content,split='\n'):
for x in content:
if not isinstance(x,str):
raise TypeError('content muse be a str')
f = open(cls.file_num,'a')
# f.writelines(content)
# f.writelines(split)
f.writelines(split.join(content))
f.close()
FileManager.write_num('abc')
FileManager.writerline_num(['a','b','c'],'*')