Python Class 笔记

本文深入探讨了Python中的类和对象概念,包括构造函数、字符串表示、子类化及继承特性。通过具体示例,展示了如何使用lambda表达式简化代码,并介绍了属性的动态添加和方法覆盖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值