目录
前言
数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象。
1、对象的简介
对象=属性+方法
属性:一个对象的静态特征
方法:对象所能做的事情
创建对象的步骤:
①创建一个类:
class Turtle:
# 属性
head = 1
eyes = 2
shell = True
# 方法
def sleep(self):
print("Zzzz……")
②再通过类创建对象:
t1 = Turtle()
那为什么类中的每个方法在定义时都要传入一个self参数呢?让我们先来看看self是什么
>>> class Turtle:
def myself(self):
print(self)
>>> t1=Turtle()
>>> t1.myself()
<__main__.Turtle object at 0x000001DC379B3EE0>
>>> print(t1)
<__main__.Turtle object at 0x000001DC379B3EE0>
哦~原来self就是t1对象本身,那为什么要传入self呢?是因为一个类可以创建出无数个实例对象,而只有传入了self参数才知道是哪个实例对象调用了这个类。
2、封装、继承、多重继承、组合
面向对象编程的三个基本特征:封装、继承、多态
而刚刚我们讲的内容就是封装,类提供了一个容器,把对象的属性和方法打包到一起,然后通过类生成相应的对象。
接下来我们看一看继承,通过继承创建的新类我们叫做子类,而被继承的类我们称为父类、基类或超类。
class A:
x=520
def hello(self):
print("hello A~")
class B(A):
pass
#isinstance方法用作判断一个对象是否继承于一个类
>>> b = B()
>>> print(isinstance(b,A))
True
>>> print(isinstance(b,B))
True
#issubclass方法用作判断一个类是否为另一个类的子类
>>> print(issubclass(B,A))
True
多重继承:
一个类可以继承自多个类,而首先继承的属性和方法来自于继承的第一个类,如果第一个类中没有则向后查找。例如
class A:
x=1
class B:
y=2
class C(A,B):
pass
>>> c=C()
>>> print(c.y)
2
组合:
class Turtle:
def say(self):
print("我要跑起来")
class Cat:
def say(self):
print("喵~")
class Dog:
def say(self):
print("旺~")
class Garden:
t=Turtle()
c=say()
d=Dog()
def say(self):
self.t.say()
self.c.say()
self.d.say()
>>> g=Garden()
>>> g.say
我要跑起来
喵~
旺~
构造函数(__init__):
class C:
def __init__(self,x,y):
self.x = x
self.y = y
def add(self):
return self.x+self.y
>>> c=C(2,3)
>>>print(c.add())
5
重写:
子类写一个同名的属性或方法,对父类进行覆盖,称为重写
class C:
def __init__(self,x,y):
self.x = x
self.y = y
def add(self):
return self.x+self.y
class D(C):
def __init__(self,x,y,z):
C.__init__(self,x,y)
self.z=z
def add(self):
return C.add(self)+self.z
>>> d=D(1,2,3)
>>>print(d.add())
6
super()函数:
用于获取父类的代理对象,以执行已在子类中被重写的父类方法
class C:
def __init__(self,x,y):
self.x = x
self.y = y
class D(C):
def __init__(self,x,y,z):
super().__init__(self,x,y)
self.z=z