面向对象的属性和方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⾯向对象的属性和⽅法对象独有的名称空间: 在产⽣对象时就赋初值
class Student:
def __init__(self, stu_name, sex):
= stu_name
self.sex = sex # 通常建议参数名与新增的属性名同名
stu = Student('Bob', 'male') # 实例化对象
print(, stu.sex)
'''
# __init__⽅法会在实例化对象时被调⽤
# 1.会为实例化的对象形成空的名称空间
# 2.就是⼀个⽅法,可以被传参,在类名(实参) 这种⽅式下调⽤并传参 __init__(self, 形参)
# 3.第⼀个self就是要产⽣的当前对象
# 重点:在⽅法内部,形参拿到了实参值,利⽤self.属性名 = 形参 = 实参值,对对象的名称空间添加属性
'''
类中⽅法的第⼀个默认参数:对象⽅法
class A:
# 对象⽅法
def test(self, num):
pass
a = A()
# 调⽤⽅法
# ⼆级优化
a.test(10)
# ⼀级优化
A.test(a, 10)
# 实现原理
A.__dict__['test'](a, 10)
# 总结:对象a传递给self,数字10传递给num
# 重点:⽅法的第⼀个参数⼀定是调⽤该⽅法的对象
类中@classmethod修饰的⽅法:类⽅法
class Tool:
@classmethod
def add(cls, n1, n2): # 统⼀类与对象都可以调⽤类⽅法,⼀定有默认传⼊第⼀个参数
return n1 + n2
# 建议
Tool.add(10, 20) # 默认第⼀个传⼊⾃⾝ - Tool
# 不建议
tool = Tool()
tool.add(100, 200) # 默认第⼀个传⼊⾃⾝所属类 - tool.__class__
属性与⽅法的总结
class OldBoy:
# 属于类的属性
name = '⽼男孩'
# 属于对象的属性
def __init__(self, name):
= name
# 属于类的⽅法
# 需求:获取机构的名字
@classmethod
def get_class_name(cls):
return
# 属于对象的⽅法
# 需求:获取校区的名字
def get_school_name(self):
return
# 先创建校区
shanghai = OldBoy('上海校区')
shenzhen = OldBoy('深圳校区')
# 类⽅法的使⽤
# 建议使⽤类调⽤
print(OldBoy.get_class_name())
# 类⽅法拿对象调⽤并没有多少新增的意义,不建议拿对象调⽤print(shanghai.get_class_name())
print(shenzhen.get_class_name())
# 对象⽅法的使⽤
# 类调⽤对象⽅法,必须把要操作的对象⼿动传⼊,不建议使⽤print(OldBoy.get_school_name(shanghai))
print(OldBoy.get_school_name(shenzhen))
# 对象调⽤对象⽅法,默认将⾃⾝传⼊,建议使⽤
print(shanghai.get_school_name())
print(shenzhen.get_school_name())
组合
# 组合:⾃定义类的对象作为另外⼀个类的属性
class Teacher:
def __init__(self, name, age):
= name
self.age = age
t1 = Teacher("Ben", 17)
class Student:
# 学⽣可以有⽼师属性
def __init__(self, name, age, teacher):
= name
self.age = age
# 组合
self.teacher = teacher
stu = Student('Bob', 18, t1)
# 访问⽼师具体的信息
print()
print(stu.teacher.age)
⾯向对象的三⼤特性
# 封装:隐藏细节 - 抽离共有
# 继承:
# 多态:
# 重点:
# 1.类的属性如何定义,类的⽅法如何定义
# 2.对象的属性如何定义,对象的⽅法如何定义
# 3.什么时候定义类⽅法与对象⽅法。