Python 02

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 02相关的知识,希望对你有一定的参考价值。

@property装饰器

虽然我们不 建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便,代码如下所示。


             使用装饰器的时候,需要注意:
            1.装饰器名,函数名需要一致。
            2.property需要先声明,在写setter,顺序不能倒过来。
            3.如果你希望变量只是被访问而不能被修改,那么可以使用访问器@property
            4.如果你要修改访问器中的变量,可以搭建一个修改器,或删除访问器。
                 class   Person(object):

                                    def    __init__(self,name,age):
                                      self._name = name
                                        self._age = age

                            访问器 ——getter方法
                            @property
                                                def __init__(self):
                                                                 return  self._name

                                                访问器——getter方法
                                                @property
                                                def age(self):
                                                   return   self._age

                                                     # 修改器 - setter方法
                         @age.setter
                          def age(self, age):
                          self._age = age

                         def play(self):
                                                    if self._age <= 16:
                                                    print(‘%s正在玩飞行棋.‘ % self._name)
                                                    else:
                                                        print(‘%s正在玩斗地主.‘ % self._name)

slots魔法

我们讲到这里,不知道大家是否已经意识到,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义slots变量来进行限定。需要注意的是slots的限定只对当前类的对象生效,对子类并不起任何作用。

class Person(object):

             # 限定Person对象只能绑定_name, _age和_gender属性
                        __slots__ = (‘_name‘, ‘_age‘, ‘_gender‘)

                        def __init__(self, name, age):
                        self._name = name
                        self._age = age

                                    @property
                                    def name(self):
                                return self._name

                                        @property
                                        def age(self):
                                        return self._age

                                    @age.setter
                                    def age(self, age):
                                    self._age = age

                                def play(self):
                                        if self._age <= 16:
                                        print(‘%s正在玩飞行棋.‘ % self._name)
                                            else:
                                    print(‘%s正在玩斗地主.‘ % self._name)

                                        def main():
                                    person = Person(‘王大锤‘, 22)
                                        person.play()
                                    person._gender = ‘男‘
                        # AttributeError: ‘Person‘ object has no attribute ‘_is_gay‘
                                # person._is_gay = True

占位符说明%s字符串(采用str()的显示)%r字符串(采用repr()的显示)%c单个字符%b二进制整数%d十进制整数%i十进制整数%o八进制整数%x十六进制整数%e指数 (基底写为e)%E指数 (基底写为E)%f浮点数%F浮点数,与上相同%g指数(e)或浮点数 (根据显示长度)%G指数(E)或浮点数 (根据显示长度)

                    %s字符串(采用str()的显示)                 
                    %r字符串(采用repr()的显示)
                    %c单个字符
                    %b二进制整数
                    %d十进制整数
                    %i十进制整数
                    %o八进制整数
                    %x十六进制整数
                    %e指数 (基底写为e)
                    %E指数 (基底写为E)
                    %f浮点数
                    %F浮点数,与上相同
                    %g指数(e)或浮点数 (根据显示长度)
                    %G指数(E)或浮点数 (根据显示长度)

 圆的面积
                                    import mat
                  width = float(input(‘请输入长方形的宽: ‘))
                     length = float(input(‘请输入长方形的长: ‘))
                            perimeter = 2*(width+length) 
                             area =  width*length 
                 print(‘周长: %.2f‘ % perimeter)
                  print(‘面积: %.2f‘ % area)
注册代码

            class Regist(object):
                def account(self):
                    email = input(‘请输入邮箱:>>‘)
                    print(‘ 您输入的邮箱是: %s‘ % email)
                    self.password()
                    def password(self):
                            for _ in range(4):
                        password_1 = input(‘请输入您的密码:>>‘)
                        password_2 = input(‘请输入确认密码:>>‘)
                        if password_1 == password_2:
                                print(‘密码确认成功‘)
                                self.verfily()
                                    break
                                else:
                                        print(‘两次密码不一致‘)
                                else:
                                    print(‘您可能是一个机器人滚‘)
                                def verfily(self):
                                for _ in range(3):
                                    import random
                                        number = random.randrange(1000,9999)
                            print(‘验证码是: %d‘%number)
                            number_2 = input(‘输入验证码:>>‘)
                            if number == int(number_2):
                                print(‘注册成功‘)
                                    break
                                else:
                                    print(‘验证码错误‘)
                        else:
                                print(‘机器人‘)

                    def main():
                    regist = Regist()
                            regist.account()

                    main()

以上是关于Python 02的主要内容,如果未能解决你的问题,请参考以下文章

Python学习02Python基础

Python-02-Python入门

python之路-02 Python基础

python02

Python 02-模块

02python 装饰器(python函数)