python怎么存储数据_Python:如何在类中存储数据并继承

我对课程很陌生,我已经写了一个班来做熊猫的操作。

@分类方法

,但我不知道如何使用它们。

我的班级目标:

我想写一个权限类。它应该加载/写入一个json文件,并且应该能够添加更多的权限。

编辑:

读了一段时间后,我发现

staticmethod

还有一个

__init__

在初始化期间加载文件的。

class Permission:

data = None

def __init__(self, path):

if Permission.data is None:

self.read_permissions(path)

@staticmethod

def read_permissions(path):

try:

with open(path, 'r') as read_file:

Permission.data = json.load(read_file)

except FileNotFoundError as e:

logging.error(e)

sys.exit(1)

def add_permissions(self, group, level, permissions):

self.data['groups'].append({

'group': group,

'level': level,

'permissions': permissions

})

所以我可以像这样使用这个类:

json_path = 'C:\\data\\test.json'

test_perm = Permission(json_path)

print(test_perm.data)

{'groups': [{'group': 'common', 'permissions': {'select_sample_x': True, 'select_sample_y': True, 'assign_x': False, 'request_y': True}}]}

test_perm.add_permissions('guys', 10, {'can_do_icecream': False, 'can_do_nothing': True})

print(test_perm.data)

{'groups': [{'group': 'pkf_common', 'permissions': {'select_sample_debitor': True, 'select_sample_creditor': True, 'assign_third_party_confirmation': False, 'request_reporting': True}}, {'group': 'guys', 'level': 10, 'permissions': {'can_do_icecream': False, 'can_do_nothing': True}}]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Container和Sphere、Cylinder两个子的实现: ```python class Container: PI = 3.1415926 total_area = 0 @classmethod def area(cls): raise NotImplementedError def __str__(self): raise NotImplementedError class Sphere(Container): def __init__(self, radius): self.radius = radius def area(self): area = 4 * self.PI * self.radius ** 2 self.total_area += area return area def __str__(self): return f"Sphere with radius {self.radius} and surface area {self.area()}" class Cylinder(Container): def __init__(self, radius, height): self.radius = radius self.height = height def area(self): area = 2 * self.PI * self.radius * (self.radius + self.height) self.total_area += area return area def __str__(self): return f"Cylinder with radius {self.radius}, height {self.height}, and surface area {self.area()}" ``` 在上面的代码,我们定义了一个Container,其包含了一个变量PI和total_area,以及两个方法area和__str__。在子Sphere和Cylinder,我们重写了Container的构造方法__init__和方法area,并且实现了__str__方法来返回一个描述子对象的字符串。 在Sphere子,我们需要一个参数radius,它代表球体的半径。在__init__方法,我们将这个半径存储在self.radius。在area方法,我们使用球体的表面积公式计算表面积,并将其累加到total_area变量。最后,在__str__方法,我们返回一个描述球体的字符串。 在Cylinder子,我们需要两个参数radius和height,分别代表圆柱体的底面半径和高。在__init__方法,我们将这两个参数存储在self.radius和self.height。在area方法,我们使用圆柱体的表面积公式计算表面积,并将其累加到total_area变量。最后,在__str__方法,我们返回一个描述圆柱体的字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值