~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/code-style.txt

  • Committer: Martin Pool
  • Date: 2010-09-13 04:41:17 UTC
  • mfrom: (5417.1.2 scripts)
  • mto: This revision was merged to the branch mainline in revision 5426.
  • Revision ID: mbp@sourcefrog.net-20100913044117-2wmxp0ahf4ptz0uf
Merge ScriptRunner interaction support

Show diffs side-by-side

added added

removed removed

Lines of Context:
78
78
===============
79
79
 
80
80
Bazaar supports Python from 2.4 through 2.6, and in the future we want to
81
 
support Python 2.7 and 3.0.  Avoid using language features added in 2.5,
82
 
2.6 or 2.7, or features deprecated in Python 3.0.  (You can check v3
83
 
compatibility using the ``-3`` option of Python2.6.)
 
81
support Python 3.0.  Avoid using language features added in 2.5 or 2.6, or
 
82
features deprecated in Python 3.0.  (You can check v3 compatibility using
 
83
the ``-3`` option of Python2.6.)
84
84
 
85
85
Specifically:
86
86
 
101
101
  if getattr(thing, 'name', None) is None
102
102
 
103
103
 
104
 
kwargs
105
 
======
106
 
 
107
 
``**kwargs`` in the prototype of a function should be used sparingly.
108
 
It can be good on higher-order functions that decorate other functions,
109
 
such as ``addCleanup`` or ``assertRaises``, or on functions that take only
110
 
(or almost only) kwargs, where any kwargs can be passed.  
111
 
 
112
 
Otherwise, be careful: if the parameters to a function are a bit complex
113
 
and might vary over time (e.g.  the ``commit`` API) then we prefer to pass an
114
 
object rather than a bag of positional and/or keyword args.  If you have
115
 
an arbitrary set of keys and values that are different with each use (e.g.
116
 
string interpolation inputs) then again that should not be mixed in with
117
 
the regular positional/keyword args, it seems like a different category of
118
 
thing.
119
 
 
120
 
 
121
 
Imitating standard objects
122
 
==========================
123
 
 
124
 
Don't provide methods that imitate built-in classes (eg ``__in__``,
125
 
``__call__``, ``__int__``, ``__getitem__``) unless the class you're
126
 
implementing really does act like the builtin class, in semantics and
127
 
performance.
128
 
 
129
 
For example, old code lets you say ``file_id in inv`` but we no longer
130
 
consider this good style.  Instead, say more explicitly
131
 
``inv.has_id(file_id)``.
132
 
 
133
 
``__repr__``, ``__cmp__``, ``__str__`` are usually fine.
134
 
 
135
 
 
136
104
Module Imports
137
105
==============
138
106