面向对象
不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题。
通过下面的例子来初步了解面向对象的编程方式。
class Person: # class + 类名 :定义一个类 place = ‘earth‘ # 类属性 (静态属性) # __init__初始化方法,默认创建一个self对象,用来接收对象的属性。可以没有初始化方法 def __init__(self, name, sex, age, nationality): # self必须有,其他的参数以对象具有的属性来定义 self.name = name # 实例化属性 self.sex = sex self.age = age self.nationality = nationality def walk(self): # 方法即函数 (动态属性),定义这一类对象所能做的事情。self必须有 print(‘%s行走‘ % self.name) zxc = Person(‘张三‘, ‘男‘, 24, ‘中国‘) # 对象 = 类名(实例化属性) -- 实例化:创建了一个具体的对象 print(zxc.name) # 张三 查看对象的属性 print(Person.place) # earth 查看类的属性 print(zxc.__dict__) # 查看对象的全部属性 是个字典 print(Person.__dict__) # 查看类的全部属性 是个字典 zxc.name = ‘李四‘ # 修改属性 zxc.walk() # 李四行走 使用方法 相当于Person.walk(zxc)
通过上面的例子简单总结一下
""" 类:用来描述一类具有相同属性和方法的对象的集合 实例化:对象 = 类名() 对象:1,可以查看属性 2,修改属性 3,调用方法 类:1,实例化 2,调用方法,但是要自己传self参数 3,查看和修改类属性 """
下面了解一下类和对象的命名空间,先定义一个类,在实例化两个对象做对比。
class Demo: class_nature = ‘静态属性‘ class_nature1 = [‘静态属性‘] def __init__(self, object_nature): self.nature = object_nature def dynamic_nature(self): print(‘动态属性‘) d = Demo(‘实例化属性‘) d1 = Demo(‘实例化属性1‘)
先研究下类
# 类只能调用类属性和动态属性即在类的命名空间中的名字 print(Demo.class_nature) # print(Demo.nature) # 报错 类不能访问对象命名空间中的名字
在看下对象
# 对象可以访问类命名空间中的名字 print(d.class_nature) # 静态属性 d.dynamic_nature() # 动态属性
可以看到对象可以访问类的命名空间中的名字,进而看看是否可以通过对象对类属性进行修改。
# 当属性是不可变数据类型,对象不能修改类命名空间中的名字,所有的修改相当于在对象自己内部创建了一个新的属性 Demo.class_nature = ‘类属性修改‘ d.class_nature = ‘d类属性修改‘ d1.class_nature = ‘d1类属性修改‘ print(Demo.class_nature) # 类属性修改 print(d.class_nature) # d类属性修改 print(d1.class_nature) # d1类属性修改
在看可变数据类型
# 当属性是可变数据类型,对象可以修改类属性里面的元素,且修改会作用于全部的对象。但是类属性本身还是不能修改 print(Demo.class_nature1) # [‘静态属性‘] d.class_nature1[0] = ‘d修改‘ d.class_nature1 = [‘修改‘] print(d.class_nature1) # [‘修改‘] print(Demo.class_nature1) # [‘d修改‘] print(d.class_nature1) # [‘修改‘] print(d1.class_nature1) # [‘d修改‘]
类的组合使用:一个对象的属性值是另外一个类的对象
下面来个例子感受一下
class Teacher: def __init__(self,name, age, birthday): self.name = name self.age = age self.birthday = birthday # 接收Birthday类的对象,从而通过Teacher类的对象就可以操作Birthday类 class Birthday: def __init__(self, year, month, day): self.year = year self.month = month self.day = day birth = Birthday(1992, 12, 23) teacher = Teacher(‘张老师‘, 26, birth) print(teacher.birthday.year) # 1992 print(teacher.birthday.month) # 12 print(teacher.birthday.day) # 23