day 15 面向对象编程
一、认识面向对象编程
做数据分析面相对象 的要求:会使用类和对象就行,即别人提供一个类,你该怎么使用它
编程思想:程序员在面对问题的时候,采用的解决方式就决定编程思想
面向过程:逻辑+算法
例子:计算1~100的和
s = 0
for x in range(1, 101):
s += x
print(s)
函数式编程:逻辑+算法+函数
print(sum(range(1,101)))
面向对象编程:逻辑+算法+函数+类+对象
print(sum(range(1,101)))
二、类和对象
1、类、对象
类:拥有相同功能和相同属性对象的集合
对象:类的实例
2、定义类(创建):用代码来描述创建的类属性、功能的对象集合
语法:
class 类名:
类的说明
类的内容
说明:
class:关键字,固定写法
类名:由程序员自己命名;
要求:是标识符,非关键字;
规范:见名知义,不使用系统函数名、类名和模块名;首字母大写,采用驼峰式命名
dog_name = ‘菜菜’
dogName = 菜菜’(驼峰式)
类的说明:本质就是多行注释
类的内容:描述类的功能、属性
功能:函数
属性:变量
3、 创建对象
"""
语法:
对象 = 类名() - 创建指定类的对象并且返回
"""
p1 = Person()
p2 = Person()
print(p1) # <__main__.Person object at 0x7fe868077be0>
print(p2) # <__main__.Person object at 0x7fe8680a8a90>
if __name__ == '__main__':
pass
4、方法:定义在类中的函数就是方法,用来描述共同功能
三种方法:对象方法、类方法、静态方法
对象方法
定义:直接定义类中的函数
调用:以’对象.xxx()'的方式调用
特点:参数self不需要传参,用谁调用,self就是谁;self就是当前对象
类方法
定义:定义函数前加装饰器 @classmethod
调用:以’类名.xxx’调用
特点:
静态方法
定义:定义 函数前加装饰器@staticmethod
调用:
特点:
class A:
"""
没有意义的类
"""
def func1(self):
print('这是一个对象方法')
@classmethod
def func2(cls):
print('这是一个类方法')
@staticmethod
def func3():
print('这是一个静态方法')
a1 = A()
a1.func1()
a2 = A()
print(f'a1:{a1},a2:{a2}')
print(f'A:{A}')
A.func2()
A.func3()
5、属性:对象属性;类属性
对象属性
定义:直接定义在类中的变量
使用:‘类.属性名’,通过类使用类属性
应用:属性值不会因为对象不同而不一样就定义成类属性
类属性
定义:以’self.属性名 = 值’的方式定义在
使用:'对象.属性名’的方式使用,通过对使用对象属性
应用:属性值会因为对象不同而不一样的定义成对象属性
补充
魔法方法:类自带的 方法中,以名字
# 案例:定义圆类
class Circle: #对象属性
pi = 3.1415926
def __init__(self):
self.r = 0
def area(self):
# self = c1;self = c2
# 在实现对象方法的功能的时候如果需要兑现属性,通过self来提供
return Circle.pi * self.r ** 2
c1 = Circle()
# print(c1.r) # r=0
c1.r = 3 #定义半径长度
c2 = Circle()
c2.r = 5
print(c1.area())
print(c2.area())
class Person:
def __init__(self):
self.name = ''
self.gender = '男'
p1 = Person()
p1.name = '小花'
p1.gender = '女'
#改进,属性为形参
class Person:
def __init__(self, name, sex):
self.name = name
self.gender = sex
p1 = Person('小花','女')
print(p1.name, p1.gender)