【实验目的】
- 掌握类、对象概念;
- 掌握类的定义以及成员属性、方法设置;
- 掌握实例对象的的实现及应用。
【主要仪器设备或实验环境】
- Windows 7或以上版本操作系统环境;
- Python运行环境;
- 常用文本编辑软件。
【实验内容】
完成以下程序编写要求并测试:
1. 设计一个Circle类来表示圆,这个类包含的半径以及求面积、周长的方法。再使用这个类创建半径为1~10的圆,并计算出相应的面积和周长。运行结果如下:
代码:
import math
class Circle:
def __init__(self,r):
self.r=r
def area(self,r):
self.r
return (r *r * math.pi)
def Perimeter(self,r):
self.r
return (2 * r*math.pi)
a=Circle(1)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(1),"周长为%6.2f"%a.Perimeter(1))
a=Circle(2)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(2),"周长为%6.2f"%a.Perimeter(2))
a=Circle(3)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(3),"周长为%6.2f"%a.Perimeter(3))
a=Circle(4)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(4),"周长为%6.2f"%a.Perimeter(4))
a=Circle(5)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(5),"周长为%6.2f"%a.Perimeter(5))
a=Circle(6)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(6),"周长为%6.2f"%a.Perimeter(6))
a=Circle(7)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(7),"周长为%6.2f"%a.Perimeter(7))
a=Circle(8)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(8),"周长为%6.2f"%a.Perimeter(8))
a=Circle(9)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(9),"周长为%6.2f"%a.Perimeter(9))
a=Circle(10)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(10),"周长为%6.2f"%a.Perimeter(10))
运行结果:
2.自定义学生类Student,成员包含:私有实例属性sno、sname、age,私有类属性count,实例方法show(用于显示sno、sname、age信息),类方法classAddCount(实现count属性累加1),静态方法staticShowCount(显示当前count值)。然后完成如下要求:
1) 创建Student对象,访问上述成员方法,然后用类名访问上述成员方法,查看结果。
2) 为Student对象动态增加新属性性别sex
3) 在类外部尝试访问私有实例属性sno
4) 在类中新定义get()方法返回age的值,以及set()方法设置age的新值,age>0时设置成为新值,age<=0时,提示设置年龄不合法。
代码:
class Student:
__count = 0
def __int__(self,sno,sname,age):
self.__sno=sno
self.__sname=sname
self.__age=age
def show(self):
print("sno:{},sanme:{}.age:{}".format(self.__sno, self.__sname, self.__age))
return
@classmethod
def classAddCount(cls):
cls.__count =cls.__count+1
return cls.__count
@staticmethod
def staticShowCount():
print('count=',Student.__count)
def set(self, age):
if age > 0:
self.__age = age
else:
print('设置年龄不合法')
def get(self):
return self.__age
a=Student()
a.__int__('2040102108','lily',18)
a.show()
a.classAddCount()
a.staticShowCount()
Student.show(a)#需要手动,传递参数
Student.classAddCount()
Student.staticShowCount()
Student.sex='male'
print('sex=',a.sex)
print('sno=',a._Student__sno)
print(list(dir(Student)))
运行结果:
3. 水果超市,有苹果、梨子、桃子、橘子...等水果:现需要记录显示每位顾客的水果购买情况;其中水果需要名字、单价属性;顾客需要名字、钱属性以及买水果方法(参数涉及购买水果对象、数量,需要判断钱余额是否足够)。请以面向对象方式设计并编程,实现相关要求。
代码:
class Fruit:
"""水果类"""
def __init__(self, name, price):
self.price = price
self.name = name
def __str__(self):
return "{}的价是{}元".format(self.name, self.price)
class Person:
"""人"""
def __init__(self, name, money):
self.name = name
self.money = money
def __str__(self):
return "{}有{}元".format(self.name, self.money)
def buy(self, fruit, quanlity):
total_money_fruit = fruit.price*quanlity
if self.money < total_money_fruit:
print("{}只有{}元,买不了{}元水果".format(self.name, self.money, total_money_fruit))
else:
self.money = self.money - total_money_fruit
print("{}购买{}斤{}成功,还剩{}元".format(self.name, quanlity, fruit.name, self.money))
#if __name__ == '__main__':
def main():
print('欢迎来到水果超市')
apple = Fruit('苹果', 8)
pear = Fruit('梨子', 10)
peach = Fruit('桃子', 15)
orange = Fruit('橘子', 3)
print(apple)
print(pear)
print(peach)
print(orange)
print('==========================')
P1= Person('p1', 50)
P2= Person('p2', 5)
print(P1)
print(P2)
print('===========================')
P1.buy(apple, 2)
P1.buy(orange, 1)
P2.buy(orange, 1)
main()
运行结果: