6.1 面向对象编程
① 编程的方式:
面向过程:根据业务逻辑从上到下写垒代码
函数式:将某功能代码封装到函数中,日后便无须重复编写,仅调用函数即可、
面向对象:对函数进行分类和封装,让开发“更快更好更强”
面向对象编程的两个非常重要的概念:类和对象
类是对象的类型,具有相同属性和行为事务的统称。类是抽象的,在使用的时候通常会找到这个类的一个具体存在。
② 定义类:
类(Class):用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类的名称:类型
属性:对象的属性
方法:对象的方法
③ 类的属性分类
类属性
实例属性
类变量:类变量在整个实例化的对象中是公用的,类变量定义在类中且在函数体外,类变量通常不作为实例变量使用,如果需要用在函数中使用:类名.类属性
实例变量:定义在方法中的变量,只作用于当前实例的类。
6.2 _init_()构造方法和self
_init_()是一个特殊的方法属于类的专有方法,被称为类的构造函数或初始化方法,方法的前面和后面都有两个下划线。
这是为了避免python默认方法和普通方法发生名称的冲突,每当创建类的实例化对象的时候,_init_()方法都会默认被运行,作用就是初始化已实例化后的对象
在方法定义中,第一个参数self是比不可少的,类的方法和普通的函数的区别就是self,self并不是Pyhon的关键字,完全可以用其他单词取代,只是按照惯例和标准的规定,推荐使用self。
6.3 针对类的属性的一些方法
可以使用实例化对象名+.来访问对象的属性,亦可以使用一下函数的方式来访问属性
getattr(obj, name[, default]):访问对象的属性
hasattr(obj,name):检查是否存在一个属性
setattr(obj,name,value):设置一个属性,如果属性不存在,会创建一个新属性
delattr(obj,name):删除属性
注意:name需要加单引号,obj为实例化对象名称
6.4 python内置类属性
①
__dict__:类的属性(包含一个字典,由类的属性名:值组成)实例化类名._dict_
__doc__:类的文档字符串 (类名.)实例化类名._doc_
__name__:类名,实现方式 类名.__name__,r如果是放在Modules模块中,就表示模块的名字:如果是放在Classs类中,就表示类的名字;
__bases__:类的所有父类构成元素(包含了一个由所有父类组成的元组)
__main__:模块,xxx.py文件本身被执行时,对应的模块名就是__main__了
②
可以在if__name___ == "__main__"中添加你自己想要的,对于测试模块,演示模块用法等代码。作为模块,被别的Python程序导入(import)时,模块名就是本身文件名xxx了。
数据成员:类变量或者实例变量(方法中的变量)用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的要求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类
"""
类定义
class 类名():
# 类文档说明
属性
方法
"""
class person():
"""
这是一个类
"""
# 实例属性通过构造方法来声明
# self不是关键字,代表的是当前这个对象
country = '中国' # 声明一个国籍类
def __init__(self, name, age, sex): # 构造方法
# 构造方法不需要调用,在实例化的时候自动调用
print('我是构造方法,在实例化的时候调用')
self.name = name # 通过self 创建实例属性,并且复制
self.age = age
self.sex = sex
# 创建普通方法
def getName(self):
print('我的名字叫: %s,我来自%s' % (self.name, person.country)) # 在方法中使用实例属性
# 实例化对象
people01 = person('joe', 19, '男') # 在实例化的时候传递参数
这个people01 就要有三个属性,并且可以使用getName方法
访问属性
print(people01.name) # 通过对象名.属性名 访问实例属性(对象属性)
print(people01.age)
print(people01.sex)
通过内置方法访问属性
print(getattr(people01, 'name'))
print(hasattr(people01, 'name'))
setattr(people01, 'name', 'susan')
print(people01.name)
delattr(people01, 'name')
print(people01.name)
通过对象调用实例方法
people01.getName()
"""
内置类属性
"""
print(people01.__dict__) # 会将实例对象的属性和值通过字典的形式返回
# print(people01.__doc__)
print(person
.__name__) # 返回类名
print(person.__bases__)