目录
类和对象的关系: 用类去创建一个对象
类是对一系列具有相同特性和行为的事物的统称--------虚拟
特征即是属性
行为即是方法
对象是类创建出来的真实存在的事物------真实存在
开发中,先有类,再有对象
Python2中类分为 经典类 和 新式类
定义类
语法:
class 类名():
代码1
代码2
........
注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯
拓展: 经典类------不由任意内置类型派生出的类称之为经典类
定义经典类 :
class 类名:
代码1
代码2
.......
创建对象
对象又名为实例
语法:
对象名 = 类名()
实例方法/对象方法:
语法:
对象名.类中方法名()
类中定义函数时参数位置的self是指调用该函数的对象
若调用该函数的对象是obj 即此时self指的就是obj
同一个类创建的不同对象调用函数方法时的self也不同
添加和获取对象属性
属性即是特征
对象属性既可以在类外面添加和获取,也能在类里面添加和获取
类外面添加对象属性:
语法:
对象名.属性名 = 值
例如:
obj.width = 100
obj.height = 200
类里面获取对象属性:
语法:
self.属性名
魔法方法:
在Python中, _xx_()的函数叫做魔法方法,指的是具有特殊功能的函数
__init__():
__init__(): 初始化对象(在定义类时定义此函数用来添加实例属性)
注意:
1.__init__()方法,在创建一个对象时默认被调用,不需要手动调用
2.__init__(self)中的self参数,不需要开发者传递,Python解释器会自动把当前的对象引用传递过去
带参数的__init__(): 对不同的对象设置不同的初始化属性
语法:
def __init__(self,属性1,属性2):
self.属性1 = 属性1
self.属性2 = 属性2
传参:创建对象时传入参数
对象名 = 类名(参数1,参数2)
__str__():
__str__(): 当使用print输出对象的时候,默认打印对象的内存地址,如果类定义了__str__方法,那么就会打印从在这个方法中return的数据
一般放置解释说明性质的文字,为了解释类的作用
__del__():
__del__(): 当删除对象时,Python解释器也会默认调用__del__()方法
删除对象时,执行__del__()方法里面的内容
示例代码
'''
class A(): # 创建类
def p(self): # 定义类中的函数
print('我是类中的方法')
print(self) # <__main__.A object at 0x0000022AA6F97278>
obj = A() # 创建对象
print(obj) # <__main__.A object at 0x000001C2EC107278>
print(type(A)) # <class 'type'>
print(type(obj)) # <class '__main__.A'>
# 对象调用类中的方法
obj.p() # <__main__.A object at 0x00000256398270B8>
obj_1 = A()
obj_1.p() # <__main__.A object at 0x000002563992C438>
# 类外面添加属性
obj.width = 100
obj.height = 200
print(obj.width)
print(obj.height)
# 类里面获取对象属性
class B():
# 定义__init__() 设置初始化属性
def __init__(self):
self.name = '我是属性name'
self.age = '我是属性age'
def p(self):
print(f'类里面获取的属性self.width:{self.width}') # 类里面获取实例属性
print(f'类里面获取的属性self.height:{self.height}')
print(f'类里面获取的属性self.name:{self.name}')
print(f'类里面获取的属性self.age:{self.age}')
obj1 = B() # 创建对象
# 添加实例属性
obj1.width = 200
obj1.height = 400
obj1.p() # 调用方法
print('--------------------------------------')
class C():
def __init__(self,width,height):
self.width = width
self.height = height
def init_p(self):
print(f'类里面获取的属性self.width:{self.width}')
print(f'类里面获取的属性self.height:{self.height}')
objc = C(400,450) # 创建不同对象时的属性值不同
objc1 = C(900,960)
objc.init_p()
objc1.init_p()
class Washer():
def __init__(self,width,height):
self.width = width
self.height = height
def __str__(self):
return '这是初始化介绍,'+f'宽度属性{self.width},高度属性{self.height}'
def __del__(self):
print(f'{self.__class__}对象已经被删除')
washer = Washer(200,250)
print(washer); # 打印时不是地址,是__str__()方法里面的内容
del washer
print('----------------------------------------')
# 烤地瓜
class SweetPotato():
def __init__(self):
self.cook_time = 0
self.cook_static = '生的'
self.cook_condiments = []
def cook(self,time):
self.cook_time += time # 时间累加
if 0 <= self.cook_time < 3:
self.cook_static = '生的'
elif 3 <= self.cook_time < 5:
self.cook_static = '半生不熟'
elif 5 <= self.cook_time < 8:
self.cook_static = '熟了'
elif self.cook_time >= 8:
self.cook_static = '糊了'
def condiments(self,str):
self.cook_condiments.append(str)
def __str__(self):
return f'时间:{self.cook_time},熟度:{self.cook_static},配料{self.cook_condiments}'
potato = SweetPotato()
print(potato) # 初始状态
potato.cook(3)
potato.condiments('辣椒')
print(potato)
potato.cook(1)
potato.condiments('麻辣')
print(potato)
potato.cook(2)
potato.condiments('甜酱')
print(potato)
potato.cook(4)
potato.condiments('番茄酱')
print(potato)