-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Closed
Description
Low-priority.
Our codebase assigns to __metaclass__ to set metaclasses, but this
only works in Python 2. The portable way is to use six.add_metaclass,
which works as a decorator. The following occurrences are broken in
Python 3:
$ git grep '__metaclass__ ='
tensorboard/backend/event_processing/db_import_multiplexer.py: __metaclass__ = abc.ABCMeta
tensorboard/plugins/base_plugin.py: __metaclass__ = ABCMeta
tensorboard/plugins/beholder/video_writing.py: __metaclass__ = abc.ABCMeta
tensorboard/program.py: __metaclass__ = ABCMeta
Demo:
$ cat /tmp/meta.py; echo
import abc
class Foo(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def foo(self):
pass
Foo() # should fail!
$ python2 /tmp/meta.py; echo $?
Traceback (most recent call last):
File "/tmp/meta.py", line 12, in <module>
Foo() # should fail!
TypeError: Can't instantiate abstract class Foo with abstract methods foo
1
$ python3 /tmp/meta.py; echo $?
0