本文共 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: passclass B(A): passprint(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))) # Trueclass A: passclass B(A): passprint(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 = 0point1 = 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 = 1a = 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 1setattr(object, name, value)对应函数 getattr(),用于设置属性值,该属性不一定是存在的。【例子】class A(object): bar = 1a = 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 = 0point1 = Coordinate()print('x = ', point1.x) # x = 10print('y = ', point1.y) # y = -5print('z = ', point1.z) # z = 0delattr(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) # 2del cc.xprint(cc.x)# AttributeError: 'C' object has no attribute '_C__x'
转载地址:http://tykp.baihongyu.com/