文章目录
python数据分析学习笔记
第8节
一、面向对象三大特征介绍
1、封装(隐藏)
隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只 对外暴露“相关调用方法”。
2、继承
继承可以让子类具有父类的特性,提高了代码的重用性
3、多态
多态是指同一个方法调用由于对象不同会产生不同的行为。
多态要注意以下 2 点:
①多态是方法的多态,属性没有多态。
②多态的存在有 2 个必要条件:继承、方法重写。
4、继承语法格式
子类继承父类已有的特征
class 子类类名(父类 1[,父类 2,…]):
类体
如果在类定义中没有指定父类,则默认父类是 object 类。也就是说,object 是所有类的父类,里面定义了一些所有类共有的默认实现。
定义子类时,必须在其构造函数中调用父类的构造函数。
class Person:
def __init__(self,name,age):
self.name = name
self.__age = age
def say_age(self):
print(self.name,"的年龄是:",self.__age)
class Student(Person):
def __init__(self,name,age,score):
self.score = score
Person.__init__(self,name,age)
s1 = Student("张三",15,85)
s1.say_age()
print(dir(s1))
5、多重继承
class A:
def aa(self):
print("aa")
class B:
def bb(self):
print("bb")
class C(B,A):
def cc(self):
print("cc")
c = C()
c.cc()
c.bb()
c.aa()
二、object
object 类是所有类的父类,因此所有的类都有 object 类的属性和方法。
三、dir()查看对象属性
查看对象所有属性以及和 object 进行比对:
class Person:
def __init__(self,name,age):
self.name = name self.
age = age
def say_age(self):
print(self.name,"的年龄是:",self.age)
obj = object()
print(dir(obj))
s2 = Person("喝一壶",18)
print(dir(s2))
四、重写__str__()方法
class Person:
def __init__(self,name,age):
self.name = name
self.__age = age
def __str__(self):
'''将对象转化成一个字符串,一般用于 print 方法'''
return "名字是:{0},年龄是{1}".format(self.name,self.__age)
p = Person("喝一壶",18)
print(p)
五、特殊方法和运算符重载
方法 | 说明 | 例子 |
---|---|---|
init | 构造方法 | 对象创建:p = Person() |
del | 析构方法 | 对象回收 |
repr,str | 打印,转换 | print(a) |
call | 函数调用 | a() |
getattr | 点号运算 | a.xxx |
setattr | 属性赋值 | a.xxx = value |
getitem | 索引运算 | a[key] |
setitem | 索引赋值 | a[key]=value |
len | 长度 | len(a) |
个运算符实际上都对应了相应的方法:
运算符 | 特殊方法 | 说明 |
---|---|---|
运算符+ | add | 加法 |
运算符- | sub | 减法 |
<,<=,== | lt,le,eq | 比较运算符 |
>,>=,!= | gt,ge,ne | 比较运算符 |
,^,& | or,xor,and | |
<<,>> | lshift,rshift | 左移、右移 |
*,/,%,// | mul,truediv,mod,floordiv | 乘、浮点除、模运算 (取余)、整数除 |
** | pow | 指数运算 |
测试运算符的重载:
class Person:
def __init__(self,name):
self.name = name
def __add__(self, other):
if isinstance(other,Person):
return "{0}--{1}".format(self.name,other.name)
else:return "不是同类对象,不能相加"
def __mul__(self, other):
if isinstance(other,int):
return self.name*other else:return "不是同类对象,不能相乘"
p1 = Person("喝一壶")
p2 = Person("一户")
x = p1 + p2
print(x)
print(p1*3)
六、特殊属性
特殊方法 | 含义 |
---|---|
obj.dict | 对象的属性字典 |
obj.class | 对象所属的类 |
class.bases | 类的基类元组(多继承) |
class.base | 类的基类 |
class.mro | 类层次结构 |
class.subclasses( | 子类列表 |
七、组合
“is-a”关系,我们可以使用“继承”。从而实现子类拥有的父类的方法和属性。
“has-a”关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。
组合测试:
class MobilePhone:
def __init__(self,cpu,screen):
self.cpu = cpu
self.screen = screen
class CPU:
def calculate(self):
print("计算,算个 12345")
class Screen:
def show(self):
print("显示一个好看的画面")
c = CPU()
s = Screen()
m = MobilePhone(c,s)
m.cpu.calculate() #通过组合,我们也能调用 cpu 对象的方法。相当于手机对象间接拥有了“cpu 的方法”
m.screen.show()