温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python的小知识有哪些

发布时间:2021-10-09 16:34:56 来源:亿速云 阅读:106 作者:柒染 栏目:编程语言

python的小知识有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、为什么要写 if __name__ == '__main__':

class User:def __init__(self):print('test import')

var_user = User()

运行时会打印出

import Test#test import

2、property动态属性,把函数变成属性描述符

#把函数变成属性描述符from datetime import date, datetimeclass User:def __init__(self, name, birthday):self.name = nameself.birthday = birthdayself._age = 0    @property    def age(self):'''该方法只能取值'''        return datetime.now().year - self.birthday.year@age.setter    def age(self, var_value):
        ''' 设置值 '''self._age = var_valueif __name__ == '__main__':
    var_user = User('tom', date(year=1985, month=2, day=6))print(var_user.age) #36    var_user.age = 100    print(var_user._age) # 100

3、属性描述符

属性描述符可以对对象的属性进行校验,属性描述符共涉及三个魔法函数,分别为__get__ 、__set__、 __delete__,实现一个即为属性描述符。

实现了__get__ 、__set__称为数据描述符,其余称之为非数据属性描述符

属性的调用顺序:

1:如果var_age是出现在类或其基类的__dict__中,且var_age是数据描述符,则调用__get__

2:如果var_age是出现在对象(obj)的__dict__中,那么直接返回obj__dict__['var_age']

3:如果var_age出现在类或者基类的__dict__中,如果var_age是非数据描述符调用__get__方法否则返回__dict__['var_age']

4:如果类有__getattr__方法,调用__getattr__方法,否则抛出AttributeError

import numbersclass IntField:def __get__(self, instance, owner):return self.valuedef __set__(self, instance, value):if not isinstance(value, numbers.Integral):raise ValueError('int value')self.value = valuedef __delete__(self, instance):passclass NoDate:def __get__(self, instance, owner):return self.valueclass TestUser:
    var_age = NoDate()class User:
    var_age = IntField()if __name__ == '__main__':
    var_user = User()
    var_user.var_age = 10    print(var_user.__dict__)
    var_user.__dict__['var_age'] = 50    print(var_user.var_age) #10    print(User.__dict__)


    var_user_test = TestUser()
    TestUser.var_age = 1    print(TestUser.var_age)#1    var_user_test.var_age = 50    print(var_user_test.__dict__)
    var_user_test.__dict__['var_age'] = 100    print(var_user_test.var_age)#100    print(TestUser.__dict__)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI