Python基础-函数的继承/多态等

定义一个类:
包含一个:类属性
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值