文章目录
- 一、 面向对象和面向过程
- 二、类的定义
- 三、对象的创建
- 四、类属性的使用方式
- 五、类方法的使用方式
- 六、静态方法的使用方式
- 七、实例方法、类方法、静态方法的区别
- 八、动态绑定属性和方法
一、 面向对象和面向过程
"""
编程的两大思想
面向过程:
事物比较简单,可以用线性思维去解决
面向对象:
事物比较复杂,使用简单的线性思维无法解决
两者的共同点:面向对象和面向过程都是解决实际问题的一种思维方式
二者相辅相成,并不是对立的
解决复杂问题,通过面向对象的方式便于我们在宏观上把握事物之间复杂的关系,方便我们分析整个系统
具体到细微操作,仍然使用面向过程的方式来处理
"""
二、类的定义
# 类的定义 class 类名: 在Python中一切皆是对象 所以类也是对象
"""
类的组成
1、类属性:类中方法外的变量称为类属性,被该类的所有对象共享
2、实例方法
3、静态方法:使用@staticmethod修饰的方法,使用
4、类方法:使用@classmethod修饰的方法,使用类名直接访问
"""
class Student: # Student为类的名称 规范:类名由一个和多个单词组成,每个单词首字母大写
native_place='吉林' # 直接写在类里面的变量,称为类属性
# 初始化方法
"""
self.name称为实体属性,进行一个赋值的操作,将局部变量的name值赋给实体属性
"""
def __init__(self,name,age):
self.name=name
self.age=age
# 实例方法 类之外定义的是函数 类之内定义的叫方法
def info(self):
print('我的名字叫:',self.name,'年龄是',self.age)
# 类方法
@classmethod #用classmethod进行修饰 所以是类方法 要求传一个cls的参数
def cm(cls):
print('类方法')
# 静态方法
@staticmethod #用staticmethod进行修饰 所以是静态方法 静态方法中不允许写self
def sm():
print('静态方法')
三、对象的创建
#对象的创建 又称类的实例化 有了实例就可以调用类中的内容
stu=Student('Jack',18)
print(id(stu))
print(type(stu))
print(stu)
print(stu.name,stu.age)
#两种方式 功能相同 都是调用Student中的info方法
stu.info() #对象名.方法
Student.info(stu) #类名.方法名(类的对象)->实际上就是方法定义中的self
四、类属性的使用方式
print(Student.native_place)
Student.native_place='南京'
stu1=Student('Seri',22)
print(stu1.native_place)
五、类方法的使用方式
# 类方法的使用方式
Student.cm()
六、静态方法的使用方式
# 静态方法的使用方式
Student.sm()
七、实例方法、类方法、静态方法的区别
"""
实例方法、类方法、静态方法的区别
1、关于参数的区别
实例方法:定义实例方法是最少有一个形参 ---> 实例对象,通常用 self
类方法:定义类方法的时候最少有一个形参 ---> 类对象,通常用 cls
静态方法:定义静态方法的时候可以不定义形参
2、关于方法定义时候添加装饰器的区别
实例方法:不需要添加装饰器
类方法:需要添加装饰器 ----> @classmethod
静态方法:需要添加装饰器 ---> @staticmethod
3、调用:
实例方法可以通过对象直接调用但是用类名调用的时候,需要创建一个对象,并且在传递参数的时候要将对象传递进去
类方法可以通过类名直接调用,也可以通过对象来调用
静态方法可以通过类名直接调用,也可以通过对象来调用
4、补充
静态方法不可以继承
类方法不能访问实例变量,只能访问类变量
"""
八、动态绑定属性和方法
"""
动态绑定属性和方法
"""
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def eat(self):
print(self.name+'在吃饭')
stu1=Student('张三',20)
stu2=Student('李四',18)
stu1.gender='男' # 动态绑定属性 原来没有的属性直接添加到对应的实例对象中
print(stu1.gender)
# 动态绑定方法
def show():
print('定义在类之外的,称函数')
stu1.show=show
stu1.show()