summaryrefslogtreecommitdiff
path: root/pypers/oxford/check_overriding.py
blob: 515775755f04e7f39f9581e13c0eebda6ca434f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# check_overriding.py

class Base(object):
    a = 0

class CheckOverriding(type):
    "Prints a message if we are overriding a name."
    def __new__(mcl, name, bases, dic):
        for name, val in dic.iteritems():
            if name.startswith("__") and name.endswith("__"): 
                continue # ignore special names
            a_base_has_name = True in (hasattr(base, name) for base in bases)
            if a_base_has_name:
                print "AlreadyDefinedNameWarning: " + name
        return super(CheckOverriding, mcl).__new__(mcl, name, bases, dic)

class MyClass(Base):
    __metaclass__ = CheckOverriding
    a = 1

class ChildClass(MyClass):
    a = 2