Files
python3-cookbook/cookbook/c09/p19_define_init.py

32 lines
740 B
Python
Raw Permalink Normal View History

2015-04-27 17:28:33 +08:00
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: 在定义的时候初始化类的成员
Desc :
"""
import operator
class StructTupleMeta(type):
def __init__(cls, *args, **kwargs):
super().__init__(*args, **kwargs)
for n, name in enumerate(cls._fields):
setattr(cls, name, property(operator.itemgetter(n)))
class StructTuple(tuple, metaclass=StructTupleMeta):
_fields = []
def __new__(cls, *args):
if len(args) != len(cls._fields):
raise ValueError('{} arguments required'.format(len(cls._fields)))
return super().__new__(cls, args)
class Stock(StructTuple):
_fields = ['name', 'shares', 'price']
class Point(StructTuple):
_fields = ['x', 'y']