Python Class 笔记
创建
class Student:
school = 'MIT'
# 每个方法的第一个参数必须是 self
def calculateFinalGrade(self): # 注意有两种调用方法! 下面有例子
...
return theFinalGrade
mary = Student()
Student.calculateFinalGrade(mary) # 调用方法1
mary.calculateFinalGrade() # 调用方法2, 不用传参数
__init__
等同于 JAVA 的 constructor 吧
class demoClass:
number = 601
def __init__(self, name, role, years, salary):
self.name = name
self.role=role
self.age=years
self.salary=salary
pat = Staff601(’Pat’, ’Professor’, 60, 100000)
__str__(self)
, __repr__(self)
相当于重写 java 的 toString 方法
前者: 普通的 toString
后者: 正式的 toString, 建议在格式上参考官方的结构.
def __str__(self):
return str(self.hours) + ':' + str(self.minutes)
def __repr__(self):
return str(self)
特点
每个实例可以随意添加新的 attribute
class Student:
name = ''
age = 0
mary = Student()
mary.studentNumber = 123456 # class 定义中并没有 studentNumber 这个 attribute
subclass
结构
def class <className>(<superclassName):
<body>
class Student601(Student):
lectureDay = 'Tuesday'
lectureTime = '9:30-11'
def calculateTutorScores(self):
...
return score
inheritance
override 父类的方法
class Father:
def __init__(self, name, age):
self.name = name
self.age = age
class Son(Father):
def __init__(self, name, age, relation):
Father.__init__(self, name, age)
self.relation = relation # 子类出现了新的 attribute --- relation
范例
在 python 中活用 lambda expression 可以节省很多代码空间
class Student:
def __init__(self, name, iq, salary, height):
self.name = name
self.iq = iq
self.salary = salary
self.height = height
class StudentBody:
def __init__(self):
self.students = []
def addStudent(self, student):
self.students.append(student)
def nameOfSmartest(self):
return self.funOfBest(lambda x: x.name, lambda x: x.iq)
def funOfBest(self, fun, feature):
return fun(argmax(self.students, feature))
def getNameMaxIQNHeight(self):
# 第一种写法 return self.funOfBest(lambda x: x.name, lambda x: x.iq + x.height)
# 第二种写法 我自己写的所以很长...
if len(self.students) == 0:
print ('no student')
return None
index0 = self.students[0]
name = index0.name
value = index0.iq + index0.height
for s in self.students:
sValue = s.iq + s.height
if(sValue > value):
value = sValue
name = s.name
return name
def argmax(elements, f):
bestElement = elements[0]
for e in elements:
if f(e)>f(bestElement):
bestElement = e
return bestElement
jody = Student(’Jody’, 100, 100000, 80)
chris = Student(’Chris’, 150, 40000, 62)
dana = Student(’Dana’, 120, 2000, 70)
aardvarkU = StudentBody()
aardvarkU.addStudent(jody)
aardvarkU.addStudent(chris)
aardvarkU.addStudent(dana)
StudentBody.funOfBest(aardvarkU, lambda x:x.name,lambda x:x.iq+x.height)
StudentBody.funOfBest(aardvarkU, lambda x:x.name,lambda x:x.iq+x.salary)