Unfortunately, the built-in str.count function doesn't support doing counts of multiple characters in a single call. The other respondents both use multiple calls to str.count and make multiple passes over the data. I believe your question specified that you didn't want to split the calls.
If you aspire for a single-pass search in only one call, there are several other ways.
One way uses a regex such as len(re.findall(r'[ab]', s)) which counts the number of a or b characters in a single pass. You could even do this in a memory-efficient iterator form, sum(1 for _ in re.finditer(r'[ab]', s)).
Another way uses sets together with filter. For example, len(filter({'a', 'b'}.__contains__, s)) also counts the number of a or b characters in a single pass. You also do this one in a memory-efficient iterator form, sum(1 for _ in itertools.ifilter({'a', 'b'}.__contains__, s)).
>>> s = 'abracadabra'
>>> re.findall(r'[ab]', s)
['a', 'b', 'a', 'a', 'a', 'b', 'a']
>>> filter({'a', 'b'}.__contains__, s)
'abaaaba'
Just for grins, there is one other way but it is a bit off-beat, len(s) - len(s.translate(None, 'ab')). This starts with the total string length and subtracts the length of a translated string where the a and b characters have been removed.
Side note: In Python 3, filter() has changed to return an iterator. So the new code would become len(list(filter({'a', 'b'}.__contains__, s))) and sum(1 for _ in filter({'a', 'b'}.__contains__, s)).
oroperator doesn't do what you want. See whatprint("." or "!")does. Also tryprint("." and "!"). You may find this answer of mine helpful in understanding whatorandanddo in Python.