定义一个类:
包含一个:类属性
count
三个对象属性:
name,age,address
count用来记录第几个学生
定义三个对象
然后为这三个对象分别赋值
把他们按照顺序写到文件里
格式如下“”
1:{‘name’:‘张三’,‘age’:‘18’,‘address’:‘北京’}
2:{‘name’:‘张二’,‘age’:‘28’,‘address’:‘上海’}
3:{‘name’:‘张大’,‘age’:‘38’,‘address’:‘北京’}
,然后在读出来,给以上定义的变量,把地址前面,加上中国
class Student():
count=0
def __init__(self,name,age,address):
self.name=name
self.age=age
self.address=address
Student.count+=1
def pt(self):
print(self.name,self.age,self.address)
#写文件:
zs=Student('张三',18,'北京')
f=open('aaa.txt','w')
f.write(str(Student.count))#类型转换
zd=dict(name=zs.name,age=zs.age,address=zs.address)
f.write(':')
f.write(str(zd))
f.write('\n')
ze=Student('张二',28,'上海')
f.write(str(Student.count))
zd=dict(name=ze.name,age=ze.age,address=ze.address)
f.write(':')
f.write(str(zd))
f.write('\n')
zd=Student('张大',38,'北京')
f.write(str(Student.count))
zd=dict(name=zd.name,age=zd.age,address=zd.address)
f.write(':')
f.write(str(zd))
读文件
f=open('aaa.txt','r')
line=f.readline() #读一行,例如1:{'name': '张三', 'age': 18, 'address': '北京'}
obj=[]#定义一个列表,用来存放每一行的学生对象
while len(line)>0:
zd=eval(line[2:].strip('\n'))#此处如果是[2:-1],那么最后一行没有\n的,被切掉最后一个字符导致数据不完整
print(zd)
x=Student(zd['name'],zd['age'],'中国'+zd['address'])
obj.append(x)
line=f.readline()
f.close()
for x in obj:
x.pt()
用while写
while len(line)>0:
zd=eval(line[2:].strip('\n'))
print(zd)
x=Student(zd['name'],zd['age'],'中国'+zd['address'])
obj.append(x)
line=f.readline()
f.close()
for x in obj:
x.pt()
继承
class People():
def __init__(self,name,age,sex,__yan):
self.name=name
self.age=age
self.sex=sex
self.__yan=__yan #两个下划线为私有属性,只能在类的内部使用
def say(self):
print(self.name,'大家好','说我今年%d岁'%self.age,self.__yan)
class Student(People):
def __init__(self,name,age,sex,score,__yan):
super().__init__(name,age,sex,__yan) #super()代表父类,对象参数一一对应
self.score=score
def talk(self):
print(self.name,'说我考了%d'%self.score)
zs=Student('张三',18,'男',99,2.0)
zs.say()
zs.talk()
print(zs.name)
多继承
例1
class A():
def AA(self):
print('AA')
class B():
def BB(self):
print('BB')
class C(A,B):
def CC(self):
print('cc')
c=C()
c.AA()
c.BB()
c.CC()
例2
class A():
def AB(self):
print('AA')
class B():
def AB(self):
print('BB')
class C(A,B): #class C(B,A): 当AB类里的函数名相同时,输出结果就是BB,按调用顺序继承
def CC(self): #def AB(self) 箭头向上,输出结果为cc,重载
print('cc')
c=C()
c.AB()
例3
class People():
def say(self):
print('我不想写代码QWQ')
class Student(People):
def say(self):
super().say()
print('不!你想!')
s=Student()
s.say()
例4
class A():
def __init__(self):
print('A开始')
print('A结束')
class B(A):
def __init__(self):
print('B开始')
super().__init__()
print('B结束')
class C(A):
def __init__(self):
print('C开始')
super().__init__()
print('C结束')
class D(B,C):
def __init__(self):
print('D开始')
super().__init__()
print('D结束')
d=D()
print(D.mro())#继承图谱
多态
class Dog():
def jiao(self):
print('旺旺')
class Cat():
def jiao(self):
print('喵喵')
class Pig():
def jiao(self):
print('哼哼')
def jiao(o):
o.jiao()
d=Dog()
c=Cat()
p=Pig()
jiao(d)
jiao(c)
jiao(p)
调用私有方法
class People():
def __init__(self,age,sex,name):
self.__age=age
self.sex=sex
self.name=name
def __sayAge(self):
print(self.__age,'岁')
def hehe(self):
print(self.name)
self.__sayAge()
zs=People(18,'男','张三')
zs.hehe()
#zs.__sayAge()#错误的!!!调不出来的!!!!
例:
class A():
x=10
class B(A):
pass
class C(A):
pass
print(A.x)
print(B.x)
print(C.x)
B.x=12
print(A.x)
print(B.x)
print(C.x)
slots:
class A():
__slots__ = ('name','age','sex','address','ok')#slots锁死范围,不能进行修改增加
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
a=A('张三',19,'男')
a.address='山东'
property,setter
class A():
def __init__(self):
pass
@property #修饰下面的方法,此符号修饰的函数,当属性使用
def name(self): #get方法(获取值)
return self._name #返回跟函数名字不一样的属性
@name.setter #name的设置方法,此属性可以用属性名.setter来启动此方法
def name(self,name_x): #set设置值
print('进来了')
self._name=name_x #简单的赋值语句
def aaa(self):
self.name=22 #此处启动了name.setter修饰的name方法
a=A
a.aaa()
print(a.name) #此处启动了property修饰的name的获取方法
例:
class DealDate():
@property
def date(self):
return self._date
@date.setter
def date(self,d):
if len(d)!=7:
self._date=d.replace('-','-0')
else:
self._date=d
ls=d.split('-')
if len(ls[1])!=2:
self._date=ls[0]+'-0'+ls[1]+'-'+ls[2]
else:
self._date=d
d=DealDate()
d.date=input('请输入日期:')
print(d.date)