注意 args 是一个*, kwargs是 ** 。
def func_1(a, b):
print(f'a:{a}, b:{b}')
def func_2(*args): # args: 个数可变的位置传参
print(f'args:{args}')
def func_3(a=100, **kwargs): # kwargs 是个数可变的关键字参数
print(f'a:{a}, kwargs:{kwargs}')
func_1(1, 2)
func_2(1, 2)
func_3(1) # a:1, kwargs:{}
func_3(10, x=1000, y=2002) # a:10, kwargs:{'x': 1000, 'y': 2002}
1 函数内部为局部变量,外部写的为全局变量。
2 可以使用global 全局化函数内部变量
1 面向对象,重点在过程
2 不变的做函数体,可变的做参数
3 使用面向对象的方式把大象放进冰箱
# 把大象装进冰箱
class Animal:
def __init__(self, name):
self.name = name
def enter(self):
print(f'{self.name} 走进冰箱')
class Fridge:
def open(self):
print(f'冰箱门打开')
def close(self):
print('关上冰箱门')
# 使用方法创建对象
fridge = Fridge() # 创建冰箱对象
elephant = Animal('大象')
fridge.open()
elephant.enter()
fridge.close()
class Phone(): # 可写可不写括号,有继承必须写+
# init传入的变量只在init生效 brand, goods_name, goods_no, weight, place, color
def __init__(self, brand, goods_name, goods_no, weight, place, color): # 局部变量
self.brand = brand
self.goods_name = goods_name
self.goods_no = goods_no
self.weight = weight
self.place = place
self.color = color
def info(self): # 手机行为
print(f'品牌:{self.brand}')
print(f'商品名称:{self.goods_name}')
print(f'商品编号:{self.goods_no}')
print(f'机身重量:{self.weight}')
print(f'商品产地:{self.place}')
print(f'机身颜色:{self.color}')
def call(self, name): # name是方法的形式参数
print(f'我使用{self.brand}正在给{name}打电话')
# 创建对象
huawei = Phone('honor', 'x40', '1004', '0.5kg', 'china', 'blue') # 位置传参
huawei.info()
huawei.call('mother')
print('__________________________________________________')
meizu = Phone('meizu', '50', '2004', '0.6kg', 'china', 'blue') # 位置传参
meizu.info()
meizu.call('mother')
print('__________________________________________________')
# 单独绑定属性
meizu.ipv6 = '支持IPV6'
print('查看单独绑定的属性:', meizu.ipv6)
# 绑定方法
def send_message(content):
print(f'发送短信,内容为:', content)
meizu.send_message = send_message # 赋值不加括号,调用加括号
meizu.send_message('今天天气不错!!!')
print('查看内存位置:', id(send_message))
print('查看对象内存位置:', id(meizu.send_message))
property
是 Python 中的一个内置装饰器,用于将一个类方法变成一个属性。它的主要作用是允许你在访问类的属性时执行一些特定的操作,例如获取、设置、删除等,而在使用时就像访问普通的属性一样。这有助于封装类的内部实现细节,同时提供更多的控制和安全性。
class MyClass:
def __init__(self, value):
self._value = value # 带下划线的属性通常被认为是私有属性
@property
def value(self):
# 在访问属性时执行的代码
return self._value
@value.setter
def value(self, new_value):
# 在设置属性时执行的代码
if new_value < 0:
raise ValueError("Value must be non-negative")
self._value = new_value
@value.deleter
def value(self):
# 在删除属性时执行的代码
print("Deleting value")
del self._value
# 创建对象
obj = MyClass(42)
# 获取属性值
print(obj.value) # 输出: 42
# 设置属性值
obj.value = 55
# 删除属性值
del obj.value
使用 property
装饰器的好处在于,它允许你隐藏属性的实际存储方式,从而更容易修改属性的内部实现,而不会影响外部代码。它还允许你添加自定义的验证逻辑,以确保属性的合法性。