博客
关于我
天池龙珠计划Python训练营——第八天
阅读量:215 次
发布时间:2019-02-28

本文共 3189 字,大约阅读时间需要 10 分钟。

    有幸参加了阿里云举办的天池龙珠计划Python训练营。收获颇多。

    每天记录一些自己之前的知识盲点,需经常温习。

一、类与对象

1、公有和私有:

公有和私有在 Python 中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。【例子】类的私有属性实例class JustCounter:    __secretCount = 0  # 私有变量    publicCount = 0  # 公开变量​    def count(self):        self.__secretCount += 1        self.publicCount += 1        print(self.__secretCount)​​counter = JustCounter()counter.count()  # 1counter.count()  # 2print(counter.publicCount)  # 2​# Python的私有为伪私有print(counter._JustCounter__secretCount)  # 2 print(counter.__secretCount)  # AttributeError: 'JustCounter' object has no attribute '__secretCount'

2、一些相关的内置函数:

一些相关的内置函数(BIF)issubclass(class, classinfo) 方法用于判断参数 class 是否是类型参数 classinfo 的子类。一个类被认为是其自身的子类。classinfo可以是类对象的元组,只要class是其中任何一个候选类的子类,则返回True。【例子】class A:    pass​​class B(A):    pass​​print(issubclass(B, A))  # Trueprint(issubclass(B, B))  # Trueprint(issubclass(A, B))  # Falseprint(issubclass(B, object))  # Trueisinstance(object, classinfo) 方法用于判断一个对象是否是一个已知的类型,类似type()。type()不会认为子类是一种父类类型,不考虑继承关系。isinstance()会认为子类是一种父类类型,考虑继承关系。如果第一个参数不是对象,则永远返回False。如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。【例子】a = 2print(isinstance(a, int))  # Trueprint(isinstance(a, str))  # Falseprint(isinstance(a, (str, int, list)))  # True​​class A:    pass​​class B(A):    pass​​print(isinstance(A(), A))  # Trueprint(type(A()) == A)  # Trueprint(isinstance(B(), A))  # Trueprint(type(B()) == A)  # Falsehasattr(object, name)用于判断对象是否包含对应的属性。【例子】class Coordinate:    x = 10    y = -5    z = 0​​point1 = Coordinate()print(hasattr(point1, 'x'))  # Trueprint(hasattr(point1, 'y'))  # Trueprint(hasattr(point1, 'z'))  # Trueprint(hasattr(point1, 'no'))  # Falsegetattr(object, name[, default])用于返回一个对象属性值。【例子】class A(object):    bar = 1​​a = A()print(getattr(a, 'bar'))  # 1print(getattr(a, 'bar2', 3))  # 3print(getattr(a, 'bar2'))# AttributeError: 'A' object has no attribute 'bar2'【例子】这个例子很酷!class A(object):    def set(self, a, b):        x = a        a = b        b = x        print(a, b)​​a = A()c = getattr(a, 'set')c(a='1', b='2')  # 2 1​setattr(object, name, value)对应函数 getattr(),用于设置属性值,该属性不一定是存在的。【例子】class A(object):    bar = 1​​a = A()print(getattr(a, 'bar'))  # 1setattr(a, 'bar', 5)print(a.bar)  # 5setattr(a, "age", 28)print(a.age)  # 28delattr(object, name)用于删除属性。【例子】class Coordinate:    x = 10    y = -5    z = 0​​point1 = Coordinate()​print('x = ', point1.x)  # x =  10print('y = ', point1.y)  # y =  -5print('z = ', point1.z)  # z =  0​delattr(Coordinate, 'z')​print('--删除 z 属性后--')  # --删除 z 属性后--print('x = ', point1.x)  # x =  10print('y = ', point1.y)  # y =  -5​# 触发错误print('z = ', point1.z)# AttributeError: 'Coordinate' object has no attribute 'z'x =  10y =  -5z =  0--删除 z 属性后--x =  10y =  -5class property([fget[, fset[, fdel[, doc]]]])用于在新式类中返回属性值。fget -- 获取属性值的函数fset -- 设置属性值的函数fdel -- 删除属性值函数doc -- 属性描述信息【例子】class C(object):    def __init__(self):        self.__x = None​    def getx(self):        return self.__x​    def setx(self, value):        self.__x = value​    def delx(self):        del self.__x​    x = property(getx, setx, delx, "I'm the 'x' property.")​​cc = C()cc.x = 2print(cc.x)  # 2​del cc.xprint(cc.x)# AttributeError: 'C' object has no attribute '_C__x'

 

转载地址:http://tykp.baihongyu.com/

你可能感兴趣的文章
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>