. 面向对象的思考过程:
客观事物-> 抽象化 ->类 ->具体化 -> 对象
汽车 嘀嘀打车软件
# 老婆 类型
class Wife:
# 数据
def __init__(self, name, face_score, money):
# 姓名
self.name = name
# 颜值
self.face_score = face_score
# 财产
self.money = money
# 行为
def work(self):
print(self.name + "工作")
# 老婆 对象
jian_ning = Wife("建宁", 90, 10000000)
# 访问数据
jian_ning.face_score += 2
print(jian_ning.face_score)
# 访问行为
jian_ning.work()
. 实例成员:对象. 成员名
实例变量:
对象. 变量名
实例方法:
def 函数名(self, 参数):
对象. 函数名(参数)
class Wife:
def __init__(self, name, money):
# 实例变量
self.name = name
self.money = money
self.work()
# 实例方法
def work(self):
pass
jian_ning = Wife("建宁", 100000)
a_ke = Wife("阿珂", 1000)
# 通过对象访问实例变量
print(jian_ning.name)
# 通过对象访问实例方法
jian_ning.work()
# __dict__变量存储的是对象实例变量
print(jian_ning.__dict__)
jian_ning.name = "建宁公主"
# jian_ning.__dict__["name"] = "建宁公主"
print(jian_ning.name) # ?
# 不建议写法1:创建实例变量,应该在类中.
# class Wife:
# def __init__(self,name):
# self.name = name
#
# su_quan = Wife("苏荃")
# print(su_quan.name)
# su_quan.money = 50000 # 创建实例变量
# print(su_quan.money) # 50000
# 不建议写法2:创建实例变量应该在构造函数中(__init__)
# class Wife:
# def __init__(self,name):
# self.name = name
#
# def set_money(self,money):
# self.money = money
#
# su_quan = Wife("苏荃")
#
# su_quan.set_money(50000)
# print(su_quan.money) # ?
. 函数参数:
实际参数:与形参如何对应
位置实参:按顺序
函数名(数据1,数据2)
序列实参:拆
函数名(*数据1)
关键字实参:按名字
函数名(形参1=数据,形参2=数据2)
实参字典:拆
函数名(**数据1)
形式参数:如何约束实参
默认形参:可选
def 函数名(形参1=数据1,形参2=数据2)
位置形参:必填
def 函数名(形参1,形参2)
命名关键字形参:必须是关键字形参
def 函数名(*, 形参1)
def 函数名(*args, 形参1)
不定长参数:数量无线
星号元组形参:位置实参
def 函数名(*args)
双星号字典形参:关键字实参
def 函数名(**kwargs)
def func01(p1=0, p2=10, p3=50):
pass
# 位置实参
xx = 1
p2 = 2
p3 = 3
func01(xx, p2, p3)
# 关键字实参
func01(p2=1, p3=2, p1=3)
func01(p2=1)
list01 = [4, 5, 6]
func01(*list01) # 实际传递的是列表元素4 5 6
dict01 = {"p1": "A", "p3": "B", "p2": "C"}
# key必须是形参名
func01(**dict01) # 实际传递的是字典键值对
def func02(*, p1):
pass
func02(p1=10)