Python学习--Day 19
- 视频来源:python视频 900集
142.面向对象之简介
- 面向对象:类、对象、属性、方法
对象的集合—》共同特征(属性)—》动作(方法)
多个对象提取共同的特征和动作,再封装到一个类。
所有的类名要大写,多个单词使用驼峰式。
class 类名[(父类)]:
____属性:特征
____方法:动作
class Phone(object): # 或 class ValueError()
# 属性
# 方法
- 感觉这节课没有干货,都是些介绍的东西。
143.面向对象之属性
- 使用类创建对象:
# 定义类
class Phone(object):
brand = 'huawei'
# 创建类对象
liu = Phone()
print(liu.brand)
- 使用了类中没有定义的属性,会报错:
AttributeError
。调用已经存在的属性,会先从自身空间中寻找,如果没有找到,就回去原来的类定义模型中寻找。
class Phone(object):
brand = 'huawei'
liu = Phone()
print(liu.brand) # 先从自身空间中寻找,如果没有找到,就回去原来的类定义模型中寻找
liu.brand = 'IPHNOE'
print(liu.brand) # 从自身空间中寻找
print(liu.hu) # 使用了类中没有定义的属性,会报错:`AttributeError`
- 如果想改变类定义中的内容,要使用类名调用对应的属性:
class Phone(object):
brand = 'huawei'
liu = Phone()
print(liu.brand)
Phone.brand = 'IPHONE' # 使用类名调用对应的属性修改。
liu = Phone()
print(liu.brand)
144.回顾
- 复习:列表推导式、集合推导式、字典推导式
- 生成器的两种形成方式:将原来的列表生成器变为()、使用yeild的函数,生成器里面的函数
- 可迭代的对象,iter()、isinstance(x,Iterable)
- 面向对象简介
145.面向对象之方法
- 类中方法:动作,分类:普通方法、类方法、魔术方法
- 普通方法的基本格式:
def 方法名 (self[,参数,参数....]):
____pass
self的含义:当前对象本身,代表调用函数的时候将对象也传输给方法本身。
call(self)可以在理解上等价于self.call()。
class Phone(object):
brand = 'xiaomi'
price = '562'
type = 'mate 2'
def call(self):
print('self___',self)
print(self.none) # 这句话有阴影,意思是不能保证每个self中都有none
phone1 = Phone()
phone1.none = 'P1'
# phone1.call() == call(phone1)
phone1.call() # 输出结果:self___ <__main__.Phone object at 0x034FE790> P1
# 因为phone1定义了call的none内容,所以可以正常打印P1
phone2 = Phone()
phone2.call() # 输出结果:self___ <__main__.Phone object at 0x034FE7F0>
# 因为phone2没有定义call的none内容,所以不可以正常打印P2
146.面向对象之init方法
- 魔术方法之一(
__init__(self)
)【魔术方法:两边带__的方法__name__(参数)
】
魔术方法__init__(self)
的特点是,魔术方法在创建对象成功后,系统就会自动执行里面的内容,对对象进行’初始化’
class Phone:
def __init__(self): # 初始化,创建对象系统默认会执行的
self.price = '499' # 默认初始化为499,如果对象后面的属性会有变化,就再次修改。
def call(self):
print('---call')
print(self.price)
p = Phone()
p.price = 1000
p.call()
- 一个问题:为什么不直接使用类属性定义一些特征而要在初始化魔术方法中创建属性呢?
弹幕说因为__init__()
可以添加参数,后面的具体应用过程会更明白,我感觉有些道理。
147.面向对象之方法补充
- 解释了上节课的疑问,使用魔术方法init传参创建对象,这样更加方便。而且类方法中也可以传参。
class Phone:
def __init__(self,price):
self.price = price
def call(self,brand):
print('---call')
print(self.price,brand)
p = Phone(233) # 直接传参,price变为233
p.call('huawei')
# 结果:
# ---call
# 233 huawei
今日有些贪玩了,明天要多看一些,加油明日Day 20