zoukankan      html  css  js  c++  java
  • 属性访问机制和元类练习

    # !/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time : 2020/5/24 23:06
    # @Author : "小多肉"
    # @Email : 1021181701@qq.com
    # @File : 属性访问机制和元类.py
    # @Software: PyCharm
    
    """TODO:
    第一题、自定义一个类
        1、通过上课的相关知识点对这个类创建的对象,进行属性限制,对象只能设置这个三个属性:  title    money   data
        2、通过相关机制对设置的属性类型进行限制,title只能设置字符串类型数据
        money设置为int类型数据  data可以设置为任意类型
        3、通过相关机制实现,data 属性不能进行删除
        4、当money设置的值少于0时,确保查询出来的值为0,
    """
    
    print('-------------------第一题--------------------')
    class AttrCtrl(object):
        __slots__ =['title','money','data']
    
        def __setattr__(self, key, value):
            if key == 'title':
                if isinstance(value,str):
                    super().__setattr__(key,value)
                else:
                    raise AttributeError('title只能设置字符串类型数据')
            elif key == 'money':
                if isinstance(value,int):
                    super().__setattr__(key,value)
                else:
                    raise AttributeError('money只能设置为int类型数据')
            else:
                super().__setattr__(key,value)
    
        def __getattribute__(self, item):
            if item == 'money':
                value = super().__getattribute__(item)
                if value < 0:
                    return 0
                else:
                    return value
            else:
                return super().__getattribute__(item)
    
        def __delattr__(self, item):
            if item == 'data':
                raise AttributeError('data不能删')
            else:
                super().__delattr__(item)
    
    a = AttrCtrl()
    a.money = 71
    print(a.money)
    a.money = -1
    a.title = 'ppp'
    a.data = 10
    print(a.money)
    print(a.data)
    print(a.title)
    try:
        del a.data
    except AttributeError as e:
        print(e)
    
    try:
        a.title = 666
    except AttributeError as e:
        print(e)
    
    try:
        a.name = 2  # 报错,不存在
    except AttributeError as e:
        print(e)
    
    """
    第二题:
    有一艘船上有40个人,由于触礁出现了漏水,现在船上最多只能载20个人,需要20个人下船。
    于是这40个人排成一队,根据站位,每个人领取了一个编号,从1开始到40。
    然后从1开始到9进行循环报数,报数为9的人出列下船,一直循环,直到船上只剩下20人。
    示例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19....40
    第一次报到9下船的人,编号为9(1,2,3,...编号为9的人报9)
    第二次下船的,编号为18,(10的人报1....18的人报9)
    第三次下船的,编号为27  (19的人报1....27的人报9)
    第四次下船,编号为36  (28的人报1....36的人报9)
    第五次下船,编号为5 (37的人报1,38报2,39报3,40报4....5的人报9)
    第六次下船,编号为15
    .....
    
    请问最后那些编号的人下船了?
    """
    print('---------------第二题----------------------')
    li = [i for i in range(1,41)]
    leave = []
    while len(li) > 20:
        leave.append(li[8])
        li = li[9::] + li[:8]
    print("最后编号为以下列表中的人下船了:")
    print(leave)
  • 相关阅读:
    自己搭建一个vue项目
    nodejs 后台开发入门
    bootstrap table入门例子
    datatable入门
    猜数字案例
    Cookie
    管理系统案例
    PHP操作数据库(以MySQL为例)
    数据库(以MySQL为例)
    案例:音乐列表
  • 原文地址:https://www.cnblogs.com/momoon/p/12953727.html
Copyright © 2011-2022 走看看