@ststucmethod 装饰器 凡是使用这个装饰器装饰的函数,称之为静态函数,
静态函数可以由类(不需要创建对象)和对象直接调用。
@staticmethod
def print_line():
print('-'*50)
@classmethod 类函数 可以由类直接调用,函数中有一个cls参数,指的是当前调用这个函数的类,
类函数可以由对象调用,cls指的是对象所属的类
@classmethod
def print_double_line(cls):
# cls 指当前使用这个函数的类
print(cls)
程序APP
from square import Square
from circle import Circle
from sector import Sector
# 图形计算器功能类
class Calcutur(object):
def __init__(self):
self.shapes = [Square(), Circle('圆形'), Sector('扇形')]
def run(self):
while True:
print('几何计算器\nV1.0')
for idx, shape in enumerate(self.shapes):
print(f"{idx+1} {shape}")
# 打印横线
Sector.print_line()
# 输入选的图形编号
index = input('输入图形编号计算,输入q退出:')
if index == 'q':
print('再见!')
break
# 转换整数
index = int(index)
# 根据选择的序号找到列表中的图形对象
# self.shapes[index-1].run()
shape = self.shapes[index - 1]
# 执行run函数()
shape.run()
if __name__ == '__main__':
calc = Calcutur()
calc.run()
主程序
class Shape(object):
def __init__(self, name='图形'):
self.name = name
self.side = 0
self.area = 0
# @staticmethod 装饰器 凡是使用这个装饰器装饰的函数,称之为静态函数
# 静态函数可以由类(不需要创建对象)和对象直接调用,
@staticmethod
def print_line():
print('-'*50)
# @classmethod 类函数
# 类函数 可以由类直接调用 函数中有一个cls参数,指当前调用这个函数的类
# 可以由对象调用。cls指的对象所属的类
@classmethod
def print_double_line(cls):
# cls 指当前使用这个函数的类
print(cls)
# 类声明范围内没有使用装饰器定义的函数
# 对象函数,必须有对象才可以使用
def display_name(self):
self.print_line()
print(self)
# __str__ print(对象) 输出在函数中返回的自定义格式的字符串
def __str__(self):
return self.name
def input_prams(self):
pass
def display_result(self):
self.print_line()
print(f'周长:{self.side}')
print(f'面积:{self.area}')
def run(self):
"""
启动计算器
:return:
"""
# 1.输出图形名称
self.display_name()
# 2.输入参数并计算
self.input_prams()
# 3.展示计算的结果
self.display_result()
if __name__ == '__main__':
shape = Shape(name='正方形')
shape.print_line()
# 直接使用类调用静态函数
# Shape.print_line()
# 类函数,可以由类直接使用
# Shape.print_double_line()
#
shape.print_double_line()
正方形
from ZYShape import Shape
class Square(Shape):
def __init__(self):
super(Square, self).__init__('正方形')
def input_prams(self):
self.print_line()
pram1 = int(input("请输入边长:"))
self.side = pram1 * 4
self.area = pram1 ** 2
if __name__ == '__main__':
Square.print_double_line()
圆形
import math
class Circle(Shape):
def input_prams(self):
self.print_line()
pram1 = int(input("请输入半径:"))
# 周长
self.side = 2*math.pi*pram1
# 面积
self.area = math.pi*pram1**2
长方形
from ZYShape import Shape
import math
class Sector(Shape):
def input_prams(self):
self.print_line()
radius = float(input("请输入半径:"))
angle = float(input("请输入角度:"))
# 计算弧长
hc = angle/360*2*math.pi*radius
# 计算扇形周长
self.side = hc + 2*radius
# 计算面积
self.area = hc * radius/2