1、两大编程思想
面向过程 | 面向对象 | |
区别 | 事物比较简单,可以用线性的思维去解决 | 事物比较复杂,使用简单的线性思维无法解决 |
共同点 | 面向过程和面向对象都是解决实际问题的一种思维方式 | |
二者相辅相成,并不是对立的 解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理 |
2、类和对象的创建
类:多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质。
数据类型:不同的数据类型属于不同的类,使用内置函数type()查看数据类型。
对象:同类下相似的不同个体,称为实例或对象。【Python中一切皆对象】
类的创建:
# Name: Python study
# Designer: MilesHugh
# Time: 2023/4/12 12:40
class Student: # Student为类的名称(类名),由一个或多个单词组成,每个单词的首字母大写,其余小写
pass
# python中一切皆对象
print(id(Student)) # 1242243713152
print(type(Student)) # <class 'type'>
print(Student) # <class '__main__.Student'>
类对象class的组成:
类属性 |
实例方法 |
静态方法 |
类方法 |
# Name: Python study
# Designer: MilesHugh
# Time: 2023/4/12 14:42
class Student:
native_pace = '湖南' # 直接写在类里的变量,称为类属性
def __init__(self, name, age):
self.name = name # self.name称为实体属性,进行了一个赋值操作,将局部变量name的值赋给实体属性
self.age = age
# 实例方法
def eat(self): # self关键字
print('学生在吃午餐!')
# 静态方法
@staticmethod
def method():
print('使用staticmethod进行修饰,是静态方法')
# 类方法
@classmethod
def cm(cls):
print('类方法,使用了classmethod进行修饰')
# 在类之外定义的称为函数,在类之内定义的称为实例方法
def drink():
print('学生在喝水!')
对象的创建:又称类的实例化。
有了实例,就可以调用类中的内容。
语法: 实例名 = 类名()
# 创建Student类的实例对象stul
stul = Student('张三', 20)
print(id(stul))
print(type(stul))
print(stul) # 输出Student对象的内存地址(十六进制)
print('------')
print(id(Student))
print(type(Student))
print(Student)
stul.eat() # 对象名.方法名() # 实例方法
print(stul.name) # 实例属性
print(stul.age)
print('------')
Student.eat(stul) # 与stul.eat()功能相同,都是调用Student中的eat方法
# 类名.方法名(类对象)————>实际上就是方法定义处的self
3、类对象、类属性、类方法与静态方法
类属性:类中方法外的变量称为类属性,被该类的所有对象所共享。
类方法:使用@classmethod修饰的方法,使用类名直接访问的方法。
静态方法:使用@staticmethod修饰的主法,使用类名直接访问的方法。
# 类属性的使用方式
print(Student.native_pace)
stul1 = Student('张三', 20)
stul2 = Student('李四', 30)
print(stul1.native_pace)
print(stul2.native_pace)
Student.native_pace = '湖北'
print(stul1.native_pace)
print(stul2.native_pace)
print('------类方法的使用方式------')
Student.cm()
print('------静态方法的使用方式------')
Student.method()
4、动态绑定属性和方法
Python是动态语言,在创建对象之后,可以动态地绑定属性和方法
# Name: Python study
# Designer: MilesHugh
# Time: 2023/4/12 14:54
class Student:
def __init__(self, name, age): # 定义初始化方法
self.name = name # 所有实例对象所共有的属性
self.age = age
def eat(self):
print(self.name + '在吃饭')
# 一个Student类可以创建N多个Student类地实例对象,每个实例对象的属性值不同
stu1 = Student('张三', 20)
stu2 = Student('李四', 30)
print(id(stu1))
print(id(stu2))
print('------为stu2动态绑定性别属性------')
stu1.gender = '女'
print(stu1.name, stu1.age, stu1.gender)
print(stu2.name, stu2.age)
print('------')
stu1.eat()
stu2.eat()
def show():
print('定义在类之外的,称函数')
stu1.show = show
stu1.show()
# stu2.show() # stu2没有绑定show()方法,故会报错