python中类的约束和限制对象添加属性

Posted 存在55555

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中类的约束和限制对象添加属性相关的知识,希望对你有一定的参考价值。

通过__slots__限制对象可添加的属性

class A:
    __slots__ = [a, b]
    pass


a1 = A()
a1.a = 10
print(a1.a)
a1.c = 0    # 只能添加a,b属性添加其他属性就报错

 

没有约束

class Alipay:
    def pay(self, money):
        print(此次消费%s % money)


class QQpay:
    def pay(self, money):
        print(此次消费%s % money)


def pay(obj, money):
    obj.pay(money)

 

弱约束

class Pay:    # 弱约束
    def pay(self, money):
        pass


class Alipay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class QQpay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class Wechatpay(Pay):
    def fuqian(self, money):    # 不规范,不报错
        print(此次消费%s % money)


# class Wechatpay:
#     def pay(self, money):     #  规范统一
#         print(‘此次消费%s‘ % money)


def pay(obj, money):
    obj.pay(money)


a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
# a1.pay(100)
# q1.pay(200)

pay(a1, 100)
pay(q1, 200)
pay(c1, 300)

 

强制约束

方法一、若不实现父类方法主动主动抛出异常进行约束

# 这个父类制定了一个约束,规范,子类一定要有pay方法。
class Pay:
    def pay(self, money):     # 主动抛异常
        raise Exception(未定义pay方法)


class Alipay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class QQpay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class Wechatpay:
    def pay(self, money):
        print(此次消费%s % money)


class Unitypay(Pay):
    def fuqian(self, money):    # 没实现父类方法
        print(此次消费%s % money)


def pay(obj, money):  # 归一化设计
    obj.pay(money)


a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
d1 = Unitypay()
# a1.pay(100)
# q1.pay(200)

# pay(a1, 100)
# pay(q1, 200)
# pay(c1, 300)
pay(d1, 200)    # 没实现父类方法在此处抛异常

 

方法二、利用模块,如果子类不实现父类方法在实例化时就报错

from abc import abstractmethod
from abc import ABCMeta


class Pay(metaclass=ABCMeta):   # 抽象类,在实例化就报错
    @abstractmethod     # 定一个约束,规范,约束子类中一定要有pay方法
    def pay(self, money):
        pass


class Alipay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class QQpay(Pay):
    def pay(self, money):
        print(此次消费%s % money)


class Wechatpay:
    def pay(self, money):
        print(此次消费%s % money)


class Unitypay(Pay):
    def fuqian(self, money):    # 没实现父类方法
        print(此次消费%s % money)


def pay(obj, money):
    obj.pay(money)


a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
d1 = Unitypay()     # 没实现父类方法,实例化时就报错
# a1.pay(100)
# q1.pay(200)

# pay(a1, 100)
# pay(q1, 200)
# pay(c1, 300)
pay(d1, 200)

 

以上是关于python中类的约束和限制对象添加属性的主要内容,如果未能解决你的问题,请参考以下文章

Python中类的继承及类的属性和方法总结

python中类的详细介绍及使用

python中类的内置属性初探

Python中类的特殊属性和魔术方法

python中类和对象的创建以及继承的实现

python中类对象实例对象类属性实例属性类方法实例方法静态方法