data: Define __slots__ for core classes.
Because these are the classes that get instantiated many times while iterating transactions, the performance benefit of defining __slots__ is worth the development overhead.
This commit is contained in:
parent
fd2830f483
commit
3aee1efdc1
1 changed files with 5 additions and 0 deletions
|
@ -62,6 +62,8 @@ class Account(str):
|
||||||
or Income:Donations. This class provides additional methods for common
|
or Income:Donations. This class provides additional methods for common
|
||||||
account name parsing and queries.
|
account name parsing and queries.
|
||||||
"""
|
"""
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
SEP = bc_account.sep
|
SEP = bc_account.sep
|
||||||
|
|
||||||
def is_checking(self) -> bool:
|
def is_checking(self) -> bool:
|
||||||
|
@ -115,6 +117,7 @@ class Metadata(MutableMapping[MetaKey, MetaValue]):
|
||||||
This class wraps a Beancount metadata dictionary with additional methods
|
This class wraps a Beancount metadata dictionary with additional methods
|
||||||
for common parsing and query tasks.
|
for common parsing and query tasks.
|
||||||
"""
|
"""
|
||||||
|
__slots__ = ('meta',)
|
||||||
|
|
||||||
def __init__(self, source: MutableMapping[MetaKey, MetaValue]) -> None:
|
def __init__(self, source: MutableMapping[MetaKey, MetaValue]) -> None:
|
||||||
self.meta = source
|
self.meta = source
|
||||||
|
@ -165,6 +168,7 @@ class PostingMeta(Metadata):
|
||||||
Under the hood, this class does a little extra work to avoid creating
|
Under the hood, this class does a little extra work to avoid creating
|
||||||
posting metadata if it doesn't have to.
|
posting metadata if it doesn't have to.
|
||||||
"""
|
"""
|
||||||
|
__slots__ = ('txn', 'index', 'post')
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
txn: Transaction,
|
txn: Transaction,
|
||||||
|
@ -207,6 +211,7 @@ class Posting(BasePosting):
|
||||||
* The `account` field is an Account object
|
* The `account` field is an Account object
|
||||||
* The `meta` field is a PostingMeta object
|
* The `meta` field is a PostingMeta object
|
||||||
"""
|
"""
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
account: Account
|
account: Account
|
||||||
# mypy correctly complains that our MutableMapping is not compatible
|
# mypy correctly complains that our MutableMapping is not compatible
|
||||||
|
|
Loading…
Reference in a new issue