Python Class 笔记

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值