面向对象知识小结
- 什么是面向对象
面向对象是以一种编程思想,核心是对象,而对象是特征与功能的结合体。
是基于结构分析,以数据为中心的程序设计思想
优点:
可扩展性强,不需要关心具体步骤
缺点:
编程复杂度高,需要设计对象
1.类
是具有相同特征和行为的一类事物的统称
作用: 用来描述该类对象具备什么样的特征和行为
其中,表明事物特征的叫属性;表明事物的行为或功能的叫方法
属性和方法又称为成员
类的定义:
class 类名:
类体
类的命名遵循变量名的命名规则,一般采用驼峰命名法
2.对象
具体的某一事物 是单个的个体
类到对象的过程叫做实例化, 对象可称之为实例 (即定义类后,创建对象)
程序中,先定义类,然后实例化对象
class Animal: # 创建一个动物类
def __init__(self,age):
self.age = age
def eat(self):
print('吃东西....')
#实例化对象;类名加括号相当于执行Animal.__init__()初始化方法
cat1 = Animal(2) # 实例化对象
print(cat1.age) # 结果:2
cat1.eat() #调用方法eat() 结果:吃东西....
关于self变量:
self是哪个对象调用方法或属性,self就是那个变量。
self在对象方法中表示当前对象本身,__init__()
是初始化函数,在创建对象时,自动将对象本身传给__init__()
的第一个参数
__init__()
方法: 创建对象时自动执行__str__()
方法:有返回值,默认返回对象的内存地址。在打印对象时默认调用__str__()
方法
class Stu:
class_id = 1001 # 类属性 静态属性 可以使用类调用也可以使用对象调用 Stu.class_id 或者 stu1.class_id 创建多个对象时共享一份类属性
def __init__(self,name,age): # 实例(对象)属性 对象初始化
= name
self.age = age
def __str__(self): # 打印对象时调用str方法,返回
return f"{}年龄{self.age}岁了,在{stu1.class_id}教室上课"
def study(self): # 实例(对象)方法
print('爱学习!')
stu1 = Stu('Lucy',16)
stu2 = Stu('Jerry',20)
print(stu1) # 执行str 方法
stu1.study() # 对象调用study方法
print(Stu.class_id)
print(stu2.class_id)
>>>
Lucy年龄16岁了,在1001教室上课
爱学习!
1001
1001
类属性:
静态属性 在类对象中定义的属性,且多个实例对象之间共享一份类属性。
类属性的唯一性
使用方式:
类名.类属性 或者 对象名.类属性
注意:
类属性中,
1.对于不可变数据类型:对象名.类属性名 = 值 是给对象中添加属性名,不能修改类属性的值
2.对于可变数据类型:如果对象是修改可变数据类型变量中的数据,会修改类属性的值,也是给该对象添加属性
class Course:
language = 'Chinese'
lst = ['a','b']
def __init__(self,course_name,price):
self.course_name = course_name
self.price = price
def teach(self):
pass
python = Course('python',1234)
#修改前
print(python.language)
print(Course.language)
print(Course.lst)
print(python.lst)
print('-----'*10)
# 修改后
python.language = 'English'
python.lst.append('c')
print(python.language)
print(Course.language)
print(Course.lst)
print(python.lst)
>>>
Chinese
Chinese
['a', 'b']
['a', 'b']
--------------------------------------------------
English
Chinese
['a', 'b', 'c']
['a', 'b', 'c']
- 面向对象的特性
三大特性: 封装、继承、多态