2025-09-10:仓库迁移

This commit is contained in:
2025-09-10 16:12:45 +08:00
parent e0e49b0ac9
commit 3130e336a1
146 changed files with 4066 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
# 有时候你编写了一堆类当数据结构用,但是懒得写一堆init函数,这时候可以将初始化数据结构的init函数归纳到一个公共基类中
class Structure:
_fields = []
def __init__(self, *args, **kwargs):
if len(args) > len(self._fields):
raise TypeError("Expect {} arguments, but only {}".format(len(self._fields), len(args)))
# 处理顺序输入的参数
for name, value in zip(self._fields, args):
setattr(self, name, value)
# 处理关键字参数
for name in args[len(self._fields):]:
setattr(self, name, kwargs.pop(name))
# 处理多余的关键字参数
if kwargs:
raise TypeError("Invalid arguments {}".format(",".join(kwargs)))
class lazy:
def __init__(self, func):
self.func = func
def __get__(self, instance, cls):
if instance is None:
return self
else:
value = self.func(instance)
setattr(instance, self.func.__name__, value)
return value
# 这时候我们会发现你只需要指定参数就行了,异常的好使
import math
if __name__ == '__main__':
class Stock(Structure):
_fields = ["name", "shares", "price"]
__slots__ = _fields
class Points(Structure):
_fields = ["x", "y"]
__slots__ = _fields
class Circle(Structure):
_fields = ["radius"]
__slots__ = _fields
@lazy
def area(self):
return math.pi * self.radius ** 2
s = Stock('ACME', 50, 91.1)
p = Points(2,3)
c = Circle(4.5)
print(c.area)
print(c.area)