面向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想。
类是对⼀系列具有相同特征和行为的事物的统称,是⼀个抽象的概念。
类是⼀个抽象的概念,不是真实存在的事物,对象是类创建出来的真实存在的事物
# 定义people类
class People():
def person(self): # 定义实例方法
print("person startup")
# 创建对象
p1 = People()
# 验证
print(p1) # 打印对象
p1.person() #调用对象方法--对象.方法名()
输出:
<__main__.People object at 0x000001C54AE88288>
person startup
3、self指的是调用该方法的对象。
class People(): #定义类
def person(self):
print("i am People class")
print(self)
p1 = People() # 创建对象
print(p1)
print("-"*40)
p1.person() #对象调用方法
输出:
<__main__.People object at 0x0000026422AF8308>
----------------------------------------
i am People class
<__main__.People object at 0x0000026422AF8308> #self的内存地址与对象p1的内存地址相同,所以self是调用该函数的对象
4、一个类创建多个对象
# 需求:1,一个类创建多个对象,2,多个对象都调用函数的时候,self地址是否相同
class People():
def person(self):
print("i am coming")
print(self)
p1 = People()
p1.person()
p2 = People()
p2.person()
输出:
i am coming
<__main__.People object at 0x0000026C3D1E8288>
i am coming
<__main__.People object at 0x0000026C3D1EFE88>
5、添加对象属性
属性即是特征,对象属性既可以在类外⾯添加和获取,也能在类⾥面添加和获取。
5.1、在类外面添加属性
5.2、在类外面访问对象属性
class People():
def person(self):
print("i am coming")
p1 = People()
p1.height = 180
p1.weight = 170
print("p1的身高是{}cm,体重是{}斤。".format(p1.height, p1.weight))
输出:p1的身高是180cm,体重是170斤。
class People():
def person(self):
print("i am coming")
def print_info(self):
print("p1的身高是{}cm,体重是{}斤。".format(self.height, self.weight))
p1 = People()
p1.height = 180
p1.weight = 170
p1.print_info()
输出:p1的身高是180cm,体重是170斤。
6、魔法方法:init()方法
在Python中, xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。
思考:对象的宽度高度是与生俱来的属性,可不可以在创建过程中就赋予这些属性呢?
答:理应如此。
init() 方法的作用:初始化对象。
class People(): # 定义类
def __init__(self): # 定义init方法,初始化功能
self.height = 180 # 添加实例属性
self.weight = 170
def print_info(self): # 定义实例方法
print("身高是{}cm,体重是{}".format(self.height, self.weight)) # 在类里面访问实例属性
p1 = People()
p1.print_info()
输出:身高是180cm,体重是170
7、带参数的__init__()
思考:一个类创建多个对象,且不同的对象设置不同的初始化属性呢?
答:传参数。
class People():
def __init__(self, height, weight): # 定义init方法,初始化实例属性,方法里有两个形参,height形参,weight形参
self.height = height # self.height是实例的属性,height是形参
self.weight = weight # self.weight是实例的属性,weight是形参
def print_info(self): #定义实例方法
print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
# 此处的self.height是实例的属性,self.weight是实例的属性
p1 = People(180, 170) # 创建实例时传入实参
p1.print_info() # 调用实例方法
p2 = People(165, 100)
p2.print_info()
输出:
身高是180cm,体重是170斤。
身高是165cm,体重是100斤。
8、魔法方法之__str__()
class People():
def __init__(self, height, weight): # 定义init方法,初始化属性,方法里有两个形参
self.height = height # self.height是实例的属性,height是形参
self.weight = weight # self.weight是实例的属性,weight是形参
def print_info(self): #定义实例方法
print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
# 此处的self.height是实例的属性,self.weight是实例的属性
p1 = People(180, 170) # 创建实例时传入实参
print(p1)
输出:<__main__.People object at 0x0000020D3888FE88>
# 当使⽤print打印对象名不加括号的时候,默认打印对象的内存地址。
class People():
def __init__(self, height, weight): # 定义init方法,初始化属性,方法里有两个形参
self.height = height # self.height是实例的属性,height是形参
self.weight = weight # self.weight是实例的属性,weight是形参
def print_info(self): #定义实例方法
print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
# 此处的self.height是实例的属性,self.weight是实例的属性
def __str__(self):
return "这是__str__方法解释说明文字,类的说明,对象状态说明"
p1 = People(180, 170) # 创建实例时传入实参
print(p1)
输出:这是__str__方法解释说明文字,类的说明,对象状态说明
9、魔法方法之__del__()
class People():
def __init__(self):
self.width = 300
def __del__(self):
print("was deleted!")
p1 = People()
输出:was deleted!