python进阶-面向对象

多继承

使用类名.__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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值