多继承
使用类名.__mro__可以查看到下一个调用的是哪个父类
*args和**kwargs拆包
import copy
def test2(a, b, *args, **kwargs):
print("-----")
print(a)
print(b)
print(args)
print(kwargs)
def test1(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
test2(a, b, *args, **kwargs) # 相当于(1,2,3,4,5,name="老王")
test1(1, 2, 3, 4, 5, name="老王")
类属性, 实例属性
class Province(object):
# 类属性
country = '中国'
def __init__(self, name):
# 实例属性
self.name = name
# 创建一个实例对象
obj = Province('山东省')
# 直接访问实例属性
print(obj.name)
# 直接访问类属性
print(Province.country)
- 类属性在内存中只保存一份
- 实例属性在每个对象中都保存一份
静态方法, 类方法
class Foo(object):
def __init__(self, name):
self.name = name
def ord_func(self):
# 定义实例方法,至少有一个self参数
print(self.name)
@classmethod
def class_func(cls):
# 定义类方法, 至少有一个cls参数
print("类方法")
@staticmethod
def static_func():
# 定义静态方法, 无默认参数
print("静态方法")
f = Foo("中国")
# 调用实例方法
f.ord_func()
# 调用类方法
Foo.class_func()
为什么需要静态方法 : 为了这个方法可以实现一些东西 , 但是不需要传参, 还需要把这个方法归为一类
property属性
class Foo:
def func(self):
pass
# 定义property属性
@property
def prop(self):
pass
foo_obj = Foo()
foo_obj.func() # 调用实例方法
foo_obj.prop # 调用property属性
- @property属性的应用
class Goods:
@property
def size(self):
return 100
good = Goods()
ret = good.size
print(ret)
- 创建property的方法-装饰器
class Goods:
def __init__(self):
self.original_price = 100
self.discount = 0.8
@property
def price(self):
new_price = self.original_price * self.discount
return new_price
@price.setter
def price(self, value):
self.original_price = value
@price.deleter
def price(self):
del self.original_price
good = Goods()
price = good.price
print(price)
good.price = 100
print(good.price)
del good.price
print(good.price)