Programming Notes

Things I Found Interesting


Class Variables:

In python, there is a strange concept of class variables (also known as static variables in java/C++):

#!/bin/env python
class MyClass:
	item=42
	def __init__(self):
		self.item = 24
	def __str__(self):
		return str(self.item)
x=MyClass()
print x.item
print x
print MyClass.item
# prints:
# 24
# 24
# 42

Subclassing and overriding __init__s with keyword args:

Also, this seems to be very confusing, but not documented anywhere:

(no I don't normally write code this ugly)

#!/bin/env python
import string
class SuperClass:
	def __init__(self, anArg=0, **keywordArgs):
		self.a1 = anArg
		for k,v in keywordArgs.items(): self.__dict__[k] = v
	def __str__(self):
		s=[]
		for k,v in self.__dict__.items(): s.append(str(k)+": "+str(v))
		return string.joinfields(s, ", ")
class SubClass(SuperClass):
	def __init__(self, subArg, **keywordArgs):
		apply(SuperClass.__init__, (self,), keywordArgs)
		self.b1=subArg
print SuperClass()
print SuperClass(42, a2=24)
print SubClass(314, z=19)
# prints:
# a1: 0
# a2: 24, a1: 42
# z: 19, a1: 0, b1: 314

Need help on the following:

#!/bin/env python
import regsub
import regex
import regex_syntax
regex.set_syntax(regex_syntax.RE_SYNTAX_AWK)

str = """blah\nblahabc\nabc\nabc\n\nblah\nblah\n"""

def gsub_findc(str):
	for i in range(0, 255):
		if (regex.search(chr(i), str) == -1):
			break
	return chr(i)
	
def gsub_m(pat, rep, str):
	c = gsub_findc(str)
	str = regsub.gsub("\n",    c, str)
	str = regsub.gsub( pat,  rep, str)
	str = regsub.gsub(   c, "\n", str)
	return str
print "Before: %s" % str
print "After: %s" % gsub_m("(.*)", "\\1", str)