面向对象知识小结

  1. 什么是面向对象
面向对象是以一种编程思想,核心是对象,而对象是特征与功能的结合体。
	是基于结构分析,以数据为中心的程序设计思想
	优点:
		可扩展性强,不需要关心具体步骤
	缺点:
		编程复杂度高,需要设计对象

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']
  1. 面向对象的特性
    三大特性: 封装、继承、多态