Frame Hack ExercisesΒΆ
Exercise
Remove object
as the superclass of PyEmployee
. How does the output change? Why does it make a difference if PyEmployee
doesn’t inherit from object
?
Exercise
Change the properties
function of Recipe #2 to match the code below. Does it still work as expected? Why or why not?
def properties(**kwargs):
framedict = sys._getframe(1).f_locals
for propname, realname in kwargs.items():
def get(self):
return getattr(self.e, 'Get'+realname)()
def set(self, value):
getattr(self.e, 'Set'+realname)(value)
framedict[propname] = property(get, set)
Exercise
Implement the property generation functionality, this time using a metaclass. Make sure the following code behaves identically to our frame hack-based code:
class __autoprops__(type):
"Define this metaclass"
class PyEmployee(object):
__metaclass__ = __autoprops__
def __init__(self, given_name, family_name, date_of_birth):
self.e = Employee()
self.given = given_name
self.family = family_name
self.birth = date_of_birth
properties = {
'given': 'GivenName',
'family': 'FamilyName',
'birth': 'DateOfBirth',
}
Exercise
[Advanced] Write two functions that print the last several frames, then run them multi-threaded 100 times and analyze the nature of frame tracing in a multi-threaded environment. I just wanted to write down this thought before I forgot!
Do you want to understand frame hacks by learning from the masters themselves? Here are some Python modules that use frame hacks: