以下内容来自于网课学习笔记。
使用的环境:
Window10+64位操作系统
PyCharm+Python3.7
一、类、类对象、实例对象
a、b、c并不影响类定义和类对象内容。但是类对象可以影响实例对象。
class C:
# 公有变量
count=0
# 四个实例对象
a=C()
b=C()
c=C()
d=C()
print(a.count)
print(b.count)
print(c.count)
print(d.count)
# 对count进行了赋值操作,覆盖了类中的count
c.count+=10
print(a.count)
print(b.count)
print(c.count)
print(d.count)
# 类对象
# 直接操作原类中的变量,实例变量的count会变化
C.count+=100
print(a.count)
print(b.count)
# 由于c实例对象已经操作过count,所以原count已经被覆盖了
print(c.count)
print(d.count)
0
0
0
0
0
0
10
0
100
100
10
100
不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展。
用不同的词性命名,如属性名用名词,方法名用动词。
class C:
def x(self):
print("X-man")
c=C()
c.x()
# 创建一个x属性,属于实例对象c
c.x=1
print(c.x)
# 不能再次调用,因为属性名与方法名相同,方法被覆盖
c.x()
二、绑定
Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
class HH:
def setXY(self,x,y):
self.x=x
self.y=y
def printXY(self):
print(self.x,self.y)
hh=HH()
print(hh.__dict__)
print(HH.__dict__)
hh.setXY(3,5)
hh.printXY()
print(hh.__dict__)
print(HH.__dict__)
del HH
# 存在在内存中
hh.printXY()
# 失败:HH已经不存在了
hhh=HH()
三、与类和对象相关的内置函数
1. issubclass(class, classinfo)
如果class是classinfo的子类,返回True。
否则,返回Error
class A:
pass
class B(A):
pass
class C:
pass
print(issubclass(B,A))
print(issubclass(B,B))
print(issubclass(B,object))
print(issubclass(B,C))
2. isinstance(object,classinfo)
检查一个实例对象是否属于一个类。
第一个参数:待检查的实例对象
第二个参数:类,可以是一个元组,包含多个类。
若第一个参数不是对象,则永远返回False。
若第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。
class A:
pass
class B(A):
pass
class C:
pass
b1=B()
print(isinstance(b1,B))
print(isinstance(b1,A))
print(isinstance(b1,C))
print(isinstance(A,B))
3. hasattr(object,name)
是否一个对象内包含指定属性。
第一个参数: 对象
第二个参数:属性名
class A:
def __init__(self,x=0,y=3):
self.x=x
self.z=y
a=A()
print(hasattr(a,"x"))
print(hasattr(a,"y"))
print(hasattr(a,"z"))
print(hasattr(A,"x"))
print(hasattr(A,"y"))
print(hasattr(A,"z"))
print(hasattr(a,x))
4. getattr(object,name[,default])
返回对象指定的属性值。
第一个参数:对象名
第二个参数:属性名
可选参数default: 出错的提示信息。
若指定的属性不存在:
若设置了default,则打印default的值
若没有设置default值,则打印
AttributeError
。
class A:
def __init__(self,x=0,y=3):
self.x=x
self.z=y
a=A()
print(getattr(a,"x"))
print(getattr(a,"z"))
print(getattr(a,"y","属性y不存在!"))
print(getattr(a,"y"))
5. setattr(object,name,value)
设置对象中指定属性的值。若指定的属性不存在,则在对象中加入此属性。
第一个参数:对象名
第二个参数:属性名
第三个参数:属性值
class A:
def __init__(self,x=0,y=3):
self.x=x
self.z=y
a=A()
setattr(a,"x",10)
setattr(a,"z","hello")
print(getattr(a,"x"))
print(getattr(a,"z"))
print(getattr(a,"y","属性y不存在!"))
setattr(a,"y",[3,4,5])
print(getattr(a,"y","属性y不存在!"))
6. delattr(object,name)
删除对象中指定的属性。
第一个参数:对象名
第二个参数:属性名
若属性不存在,则会返回
AttributeError
错误。
class A:
def __init__(self,x=0,y=3):
self.x=x
self.z=y
a=A()
print("x:"+str(getattr(a,"x")))
print("y:"+str(getattr(a,"z")))
setattr(a,"y",[3,4,5])
print("y:"+str(getattr(a,"y","属性y不存在!")))
delattr(a,"y")
print(getattr(a,"y","属性y不存在!"))
7. property(fget=None,fset=None,fdel=None,doc=None)
通过属性设置属性。
第一个参数:传入获取属性的方法
第二个属性:传入设置属性的方法
第三个参数:传入删除属性的方法
第四个参数:
class WW:
def __init__(self,size=10):
self.size=size
def getSize(self):
print("size:"+str(self.size))
def setSize(self,value):
self.size=value
def delSize(self):
del self.size
x=property(getSize,setSize,delSize)
ww=WW()
ww.getSize()
ww.x
ww.x="WaitFoF"
ww.x
print(ww.size)
ww.getSize()
del ww.x
ww.size