python基础---类的综合操作与练习题

本文通过实例演示了Python中类的定义与使用,包括继承、魔术方法、静态方法及类方法的应用。通过创建人物类,展示了如何进行初始化、定义私有属性、方法重写等操作。同时,介绍了字典操作、文件读写以及运算符重载等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#练习题。创建一个类:题目描述

class People():
    tax=0
    def __init__(self,name,age,work,salsry):
        self.name=name
        self.age=age
        self.work=work
        self.salsry=salsry
        self.__energy=100
    def working(self):
        People.tax+=self.salsry*0.2
        self.__energy=self.__energy-30 if self.__energy>30 else 0
    def eat(self,money):
        self.__energy=self.__energy+10 if self.__energy<90 else 100
        self.salsry-=money
    def sleep(self,energy):
        self.__energy=self.__energy+60 if self.__energy<40 else 100
    def say(self):
        print("我叫{},年龄是{},工作是{}。".format(self.name,self.age,self.work))
        print(self.__energy,self.salsry)
    def get_energy(self):
        return self.__energy
class Women(People):
    def shopping(self,money):
        self.salsry-=money
        print(self.salsry)
class Men(People):
    def say(self):
        super().say()
        print("笑话")
s=Women('zs',13,'df',19999)
s.say()
s2=Men('zs',13,'df',19999)
s2.say()

#练习题2.
题目描述

dic={ '001':{'name':'张三','age': 18 ,'num':'001'},
      '002':{'name':'张二','age': 28 ,'num':'002'}}
class FileAction():
    @staticmethod
    def writeDate():
        f=open("data.txt",'w')
        for k,v in dic.items():
            for k1,v1 in v.items():
                f.write( (k1+":"+str(v1)))
                if k1=='num':
                    f.write('\n')
                else:
                    f.write(',')
        f.close()
    @staticmethod
    def readData( ):
        f=open('data.txt','r')
        line=f.readline()
        dzd={}
        while len(line)>0:
            items=line.strip().split(',')
            zd={}
            for item in items:
                s=item.split(':')
                if s[0]=='age':
                    zd[s[0]]=int(s[1])
                else:
                    zd[s[0]] =s[1]
                if s[0]=='num':
                    dzd[s[1]]=zd
            line=f.readline()
        print(dzd)
        f.close()
FileAction.readData( )

#三角形输出。
class Paint():
    def paintstar(self):
        i=1
        while i<6:#for i in range(1,6)
            j=1
            while j<=5-i:#for j in range(1,6-i)
                print(' ',end='')
                j+=1
            j=1
            while j<=2*i-1:#for j in range(1,2*i)
                if j==1 or j==2*i-1 or i==5:#空心三角形的输入方法。
                    print("*",end='')
                else:
                    print(" ",end='')
                j+=1
            print()
            i+=1
s=Paint()
s.paintstar()

#类内对字典操作。
a={
    '001':{'name':'张三','age':'18','address':'北京'},
    '002':{'name':'张二','age':'28','address':'上海'},
    '003':{'name':'张大','age':'38','address':'北京'},
    '004':{'name':'张四','age':'28','address':'上海'},
    '005':{'name':'张六','age':'38','address':'北京'}
}
class StudentAdmin():
    @staticmethod
    def write():
        f=open('a.txt','w')
        f.write(str(a))
        f.close()
    @staticmethod
    def read():
        f=open('a.txt','r')
        c=f.read()
        f.close()
        return eval(c)
s=StudentAdmin.write()
s=StudentAdmin.read()
while True:
    bh=int(input("请输入编号:"))
    if bh==1:
        xh=input("请输入学号:")
        if xh in a.keys():
            print("学号重复")
            continue#重复后重新走循环,再次输入编号。
        else:
            zd={}
            zd['name']=input("请输入姓名:")
            zd['age']=int(input("请输入年龄:"))
            zd['add']=input("请输入地址:")
            a[xh]=zd
        print(a)
        print('增加')
    elif bh==2:
        xh = input("请输入学号:")
        if xh not in a.keys():
            print("查无此人")
            continue
        else:
           print("要删除的人是",a[xh])
           del a[xh]
           print(a)
        print('删除')
    elif bh==3:
        xh = input("请输入学号:")
        if xh not in a.keys():
            print("查无此人")
        else:
            a[xh]['name']=input("请输入姓名:")
            a[xh]['age']=int(input("请输入年龄:"))
            a[xh]['address']=input("请输入地址:")
        print(a)
        print("更改")
    elif bh==4:
        xh = input("请输入学号:")
        if xh not in a.keys():
            print("查无此人")
            continue
        else:
            print(a[xh])
        print("查找")
    elif bh==0:
        StudentAdmin.write()#程序结束,先把添加修改后的值写入文件里
        break#break跳出循环,exit()结束循环。

#魔术方法。
class A():
    count=0
    def __init__(self,name):
        self.name=name
        A.count+=1
    def __del__(self):
        A.count-=1
        print("删除",self.name,"还剩%d个对象"%A.count)
a=A("xz")
b=A("xl")
del a#触发函数del的格式
del b

class Num():
    def __init__(self,n):
        self.n=n
    def __add__(self, other):
        return self.n+other.n
    def __sub__(self, other):
        return self.n-other.n
    def __mul__(self, other):
        return self.n*other.n

a=Num(4)
b=Num(7)
c=a+b#调用add函数的格式
d=a-b#调用sub函数的格式
e=a*b
print(c)
print(d)
print(e)

class Num():
    def __init__(self,n):
        self.n=n
    def __call__(self, *args, **kwargs):
        result=self.n
        for a in args:
            result*=a
        for k,v in kwargs.items():
            result+=v
        return result
a=Num(2)
c=a(1,2,3,age=4,weight=90)#返回的result是最终相加的结果 1,2,3放入args,age=4,weight=90放入kwargs
print(c)

class Car():
    obj=10
    def __new__(cls, *args, **kwargs):
        print("here")
        return object.__new__(Car)
    def __init__(self,name,cid):
        print('hello')
        self.name=name
        self.cid=cid
        print(self.name,self.cid)
b=Car('bmw','1230987')
b.__new__(Car)
print(hasattr(Car,'obj'))#判断类中是否有obj这个属性,返回布尔值
'''
class Car():
    def __new__(cls, *args, **kwargs):
        if not hasattr(Car,'inst'):#如果Car里面没有inst属性
            Car.inst=object.__new__(cls)#建立一个Car对象给inst属性。
        return Car.inst#返回inst属性
    def __init__(self, name, cid):
        print('hello')
        self.name = name
        self.cid = cid
a=Car("zs",'1130')
b=Car('as','1230')
print(a is b)
print(a.name)
print(b.name)#相同,以最后一次赋值为准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值