面向对象 继承 多态 封装 python特性@property @date.setter

#定义一个类 ,将对象加入一个文件,读出来 地址前加中国

class student():
    count=0
    def __init__(self,name,age,addrss):
        self.name=name
        self.age=age
        self.address=addrss
        student.count+=1
    def pt(self):
        print(self.name,self.age,self.address)
zs=student('张三',18,'北京')
f=open('b.txt','w',encoding='utf-8')
f.write(str(student.count))
f.write(':')
zs=dict(name=zs.name,age=zs.age,address=zs.address)
f.write(str(zs))
f.write('\n')
ls=student('李四',19,'河南')
f.write(str(student.count))
ls=dict(name=ls.name,age=ls.age,address=ls.address)
f.write(':')
f.write(str(ls))
f.write('\n')
ww=student('王五',20,'上海')
f.write(str(student.count))
ww=dict(name=ww.name,age=ww.age,address=ww.address)
f.write(':')
f.write(str(ww))
f.write('\n')
f.close()

f=open('b.txt','r',encoding='utf-8')
line=f.readline()#初始值
lis=[]
while len(line)>0:#判断条件
    zd=eval(line[2:].strip('\n'))#将换行切掉
    x=student(zd['name'],zd['age'],'中国'+zd['address'])
    lis.append(x)
    line=f.readline()#步长值
f.close()
for x in lis:
    x.pt()

#面向对象 3个要素 :封装 继承 多态
#继承【私有属性不能被继承】

class people():
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        self.__yan=5.0#在前面加两个'_'表示为父类的私有属性,不能被子类继承
    def pt(self):
        print(self.name,'今年%d岁'%self.age,self.__yan)
class student(people):#继承类
    def __init__(self,name,age,sex,score):
        super().__init__(name,age,sex)#super().继承对象
        self.score=score
    def pt1(self):
        print(self.name,'今年%d岁'%self.age,'考了%d分'%self.score)
zs=student('张三',18,'男',99)
zs.pt()
zs.pt1()

#私有的方法也不能被继承

class people():
    count=4
    c2=3
    @classmethod
    def lff(cls,c1):
        cls.__s=3
        print(cls.count*c1*cls.__s)
class student(people):
    @classmethod
    def lf(cls,c1):
        super().lff(c1)
        print(cls.count*cls.c2*c1)
zs=student()
zs.lf(4)

#多继承

class A():
    def a(self):
        print('aa')
class B():
    def b(self):
        print('bb')
class C(A,B):
    def c(self):
        print('cc')
c=C()
c.a()
c.b()
c.c()

#重载

class A():
    def a(self):#a
        print('aa')
class B():
    def a(self):#两个类里的函数名相同 ,调用按继承的顺序输出。
        print('bb')
class C(A,B):#按继承的顺序输出
    def a(self): #继承与被继承 的函数名相同 优先输出自己的【重载】
        print('cc')
c=C()
c.a()

#函数名相同时 调用被继承的 super().

class A():
    def a(self):
        print('aa')
class C(A):
    def a(self):
        super().a()
        print('cc')
c=C()
c.a()

#菱形继承

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):#按 d b c a的顺序
    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 jiaox(j):
    j.jiao()
d=dog()
c=cat()
p=pig()
jiaox(d)
jiaox(c)
jiaox(p)

#类属性 【先输出私有属性】

class a():
    x=10
class b(a):
    pass
class c(a):
    pass
print(a.x)
print(b.x)
print(c.x)
b.x=13
print(a.x)
print(b.x)
print(c.x)

#slots

class student():
    __slots__ = ('name','age','sex','address')#限制了对象属性【可以加不可以少】
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
a=student('张三',12,'男')
a.address='北京'

#@property@name.setter

class a():
    def __init__(self):
        pass
    @property#属性 修饰下面的方法,此符号修饰的函数 当方法使用
    def name(self):# get 方法 获取值
        return  self.name1#返回跟函数名不一样的属性
    @name.setter#name的设置方法 此属性可以用属性名=来启动此方法
    def name(self,name_1):#set 设置值
        print('进来了')
        self.name1=name_1
    def aa(self):
        self.name=12#此处启动了name。setter的name方法
q=a()
q.aa()
print(q.name)#此处启动了property修饰的name获取方法

#练习

class rq():
    @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=rq()
d.date='2019-9-23'
print(d.date)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值