面向过程:功能上的封装
面向对象:属性和行为上的封装
面向过程 | 面向对象 | |
---|---|---|
区别 | 事物比较简单,可以用线性的思维去解决 | 事物比较复杂,使用简单的线性思维无法解决 |
共同点 | 1、面向过程和面向对象都是解决实际问题的一种思维方式 2、二者可以相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程方式来处理 |
类是怎么来的?
是由若干个对象抽取出共同的属性和行为从而归纳总结出来的一种类别
在Python中一切皆对象:
字符串对象-str字符串类型
整数对象-整数类型
a=10
b=9.1
s='hello'
print(type(a))
print(type(b))
print(type(s))
# 输出中的class就是类的意思
自定义数据类型的语法结构:
class 类名(): # 类名自取,要求首字母大写;小括号可以写也可以省略
pass
创建对象的语法格式为:
对象名=类名()
代码实例:
# 编写一个Person
class Person():
pass
# 编写一个Cat类
class Cat():
pass
class Dog:
pass
class Student():
pass
# 类是一个抽象的模板,不是实例
# 创建类的对象
per=Person()
c=Cat()
d=Dog()
stu=Student()
print(type(per),type(c),type(d),type(stu))
1、类属性:直接定义在类中,方法外的变量
2、实例属性:定义在__init__方法中,使用self打点的变量
3、实例方法:定义在类中的函数,而且自带参数self
4、静态方法:使用装饰器@staticmethod修饰的方法
5、类方法:使用装饰器@classmethod修饰的方法
代码实例:
class Student:
# 类属性:定义在类中,方法外的变量
school='北京xx教育'
# 初始化方法
def __init__(self,name,age): # name,age是方法的参数,是局部变量,name和age作用域是整个__init__方法
self.name=name # 左侧试实例属性,将局部变量的值赋值给实例属性
self.age=age # 同上
# 定义在类中的函数,称为方法,自带一个参数叫做self
def show(self):
print(f'我叫{self.name},今年{self.age}岁')
# 静态方法
@staticmethod
def sm(): # 不会自带self,小括号中写了才会有
print('这是一个静态方法,不能调用实例属性,也不能调用实例方法')
# 类方法
@classmethod
def cm(cls): # cls是class的简写,会自动补全
print('这是一个类方法,不能调用实例属性,也不能调用实例方法')
stu=Student('tom',17) # 对应类中的init方法,self无需写
# 实例属性,使用对象名进行打点调用
print(stu.name,stu.age)
# 类属性,使用对象名进行打点调用
print(stu.school)
# 实例方法,使用对象名进行打点调用
stu.show()
# 类方法,使用@classmethod进行修饰的方法,使用类名打点调用,注意是类名,不是实例名
Student.cm()
# 静态方法 使用@staticmethod进行修饰的方法,直接使用类名打点调用
Student.sm()
class Student:
# 类属性:定义在类中,方法外的变量
school='北京xx教育'
# 初始化方法
def __init__(self,name,age): # name,age是方法的参数,是局部变量,name和age作用域是整个__init__方法
self.name=name # 左侧试实例属性,将局部变量的值赋值给实例属性
self.age=age # 同上
# 定义在类中的函数,称为方法,自带一个参数叫做self
def show(self):
print(f'我叫{self.name},今年{self.age}岁')
# 静态方法
@staticmethod
def sm(): # 不会自带self,小括号中写了才会有
print('这是一个静态方法,不能调用实例属性,也不能调用实例方法')
# 类方法
@classmethod
def cm(cls): # cls是class的简写,会自动补全
print('这是一个类方法,不能调用实例属性,也不能调用实例方法')
# 根据图纸创建多个对象
stu=Student('ysj',18)
stu2=Student('cmm',20)
stu3=Student('ml',21)
stu4=Student('marry',23)
# 类属性直接赋值
Student.school='Python教育'
lst=[stu,stu2,stu3,stu4]
for item in lst:
item.show()