Explicit type checking is not typically seen in Python code, and usually
that's not a big problem; most typing errors are likely to raise a TypeError
or AttributeError sooner than later. There are cases, though, where typing
errors are not caught (at least not early) because different classes happen
to have methods with the same name; that's really subtle with the special
methods like __eq__, __hash__, etc. that are common to all (or at least
many) classes.
It happened to me when I was passing arguments of some type B to a function
instead of the correct type A; these arguments were entered as keys in a
dictionary, and since both A and B were hashable the interpreter didn't
complain. Of course, when later I was trying to retrieve the A()s I thought
I had entered, I couldn't find them (debugging was even harder in this case
because B was essentially a wrapper for A and the __str__ of both classes
was deliberately the same, so the A()s appeared to be in the dict; that's
not the issue here though).
I wonder if people have come up with such pitfalls in practice or I was just
careless. In any case, I was tempted enough to write a simple extensible
runtime type checking module, which can be handy, at least during
development. It's extensible in the sense that a "type" can be any
constraint, not just a python type or class. Here's an example of usage:
def foo(name, age, children, phonebook):
assert TypeChecker.verify(
(age, int),
(name, TupleOf((str,str))),
(children, ListOf(Child)),
(phonebook, DictOf(str, ContainerOf(Phone))))
foo(name = ("Paul", "Smith"),
age = 23,
children = [Child(), Child()],
phonebook = {
"Mike": (Phone(), Phone()),
"office": [Phone()]
})
ContainerOf, TupleOf, ListOf and DictOf are all extensions of the abstract
TypeChecker class, providing some limited but common templated-type
checking. Of course in practice most complex structures (e.g. phonebook)
would be encapsulated in a class, so it's questionable whether such
functionality adds up anything to a list of "assert isinstance(object,type)"
statements. Any ideas or suggestions are welcome.
George 3 2328
George Sakkis wrote: I wonder if people have come up with such pitfalls in practice or I was just careless. In any case, I was tempted enough to write a simple extensible runtime type checking module, which can be handy, at least during development. It's extensible in the sense that a "type" can be any
And in other places: some functions need to behave differently depending
on the types of their arguments. When interfaces come into play,
isinstance() just doesn't cut it.
ContainerOf, TupleOf, ListOf and DictOf are all extensions of the abstract TypeChecker class, providing some limited but common templated-type checking. Of course in practice most complex structures (e.g. phonebook) would be encapsulated in a class, so it's questionable whether such functionality adds up anything to a list of "assert isinstance(object,type)" statements. Any ideas or suggestions are welcome.
Along with TupleOf, ListOf, DictOf, etc., include interface checkers,
such as SequenceOf and MappingOf. People will love you for it.
Christopher T King <sq******@WPI.EDU> wrote in message news:<Pi**************************************@ccc 1.wpi.edu>... (...) some functions need to behave differently depending on the types of their arguments (...)
Uhm.. this doesn't seem very OO to me; if a function needs to behave
differently for different argument types, it's an indication that it
should be defined as method, overriden for each type of interest (or
multiple-dispatched if more than one arguments are involved).
George
George, don't forget to have a look at the Traits package of scipy.
HTH
Franz
George Sakkis wrote: Explicit type checking is not typically seen in Python code, and usually that's not a big problem; most typing errors are likely to raise a TypeError or AttributeError sooner than later. There are cases, though, where typing errors are not caught (at least not early) because different classes happen to have methods with the same name; that's really subtle with the special methods like __eq__, __hash__, etc. that are common to all (or at least many) classes.
It happened to me when I was passing arguments of some type B to a function instead of the correct type A; these arguments were entered as keys in a dictionary, and since both A and B were hashable the interpreter didn't complain. Of course, when later I was trying to retrieve the A()s I thought I had entered, I couldn't find them (debugging was even harder in this case because B was essentially a wrapper for A and the __str__ of both classes was deliberately the same, so the A()s appeared to be in the dict; that's not the issue here though).
I wonder if people have come up with such pitfalls in practice or I was just careless. In any case, I was tempted enough to write a simple extensible runtime type checking module, which can be handy, at least during development. It's extensible in the sense that a "type" can be any constraint, not just a python type or class. Here's an example of usage:
def foo(name, age, children, phonebook): assert TypeChecker.verify( (age, int), (name, TupleOf((str,str))), (children, ListOf(Child)), (phonebook, DictOf(str, ContainerOf(Phone))))
foo(name = ("Paul", "Smith"), age = 23, children = [Child(), Child()], phonebook = { "Mike": (Phone(), Phone()), "office": [Phone()] })
ContainerOf, TupleOf, ListOf and DictOf are all extensions of the abstract TypeChecker class, providing some limited but common templated-type checking. Of course in practice most complex structures (e.g. phonebook) would be encapsulated in a class, so it's questionable whether such functionality adds up anything to a list of "assert isinstance(object,type)" statements. Any ideas or suggestions are welcome.
George
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: sashan |
last post by:
I'm a Python newbie. I have been using c++ for 5 years and before that I
was programming in Pascal. The one thing that annoys me about python
is dynamic typing because I find myself making...
|
by: Jon Perez |
last post by:
I have a C extension function into which I pass a list of lists
of tuples:
,
,
,
]
I then unpack the values (down to the tuple elements) into their C
values using:
|
by: Tongu? Yumruk |
last post by:
I have a little proposal about type checking in python. I'll be glad
if you read and comment on it. Sorry for my bad english (I'm not a
native English speaker)
A Little Stricter Typing in Python...
|
by: Web Developer |
last post by:
Hi,
I come across the term "type checking" very often in my readings on C++, and
have never heard it in Java. Besides the simplistic answer that it checks
the "type", what more does it mean?
...
|
by: Greg Roberts |
last post by:
We have a large code base, mainly C but with some C++ which we wish to check
for
existing issues in an effort to be proactive.
I have downloaded the open source GLINT program but am having big...
|
by: Vinodh Kumar P |
last post by:
Whenever I read any C++ literature I find the words "C++ is statically type
checked".OK.Agreed.
Is there any language that supports "Dynamic type checking"?
In such a case any type can be assigned...
|
by: Xiaoshen Li |
last post by:
Hi,
I am reading the book "Concepts of programming languages" by R. W.
Sebesta. He said:
"One of the most important reasons why C is both liked and disliked is
its lack of complete type...
|
by: Gabriel Genellina |
last post by:
En Mon, 06 Oct 2008 11:19:58 -0300, Joe Strout <joe@strout.netescribió:
Apart from the wise words that others have said, I'd add that I see no
point in identifier prefixes when they merely...
|
by: Joe Strout |
last post by:
Let me preface this by saying that I think I "get" the concept of duck-
typing.
However, I still want to sprinkle my code with assertions that, for
example, my parameters are what they're...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
| |