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__)
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。