类 , 类对象 , 实例对象

image.png

  1. class C: # 类定义
  2. coum = 0 # 类对象
  3. a = C() # 实例化
  4. b = C() # 实例化
  5. c = C() # 实例化
  6. dd = C() # 实例化
  7. a.coum # 实列化对象 0
  8. b.coum # 实列化对象 0
  9. c.coum # 实列化对象 0
  10. dd.coum # 实列化对象 0
  11. dd.pric = 100
  12. # 那么这个 pric 这个对象 只属于 dd 而类名C 里是没有pric这个属性的,
  13. ## 那怎么认证呢? 使用 CC.__dict__ dd.__dict__
  14. ## 那为什么会这样呢,? 当 dd 实例化属性对象的时候 它实际上是这么存的
  15. dd.self.coum =50
  16. # 现在使用 类名去修改, 那分别 a b c 是多少?
  17. C.counm += 100

查看答案密码: 123456
类中定义的 属性 是静态变量, 方法也一样, 就算类对象被删除, 它们依然是存放在内存中的, 只有这个程序被退出了 ,变量才会被释放

在大多数的情况下编程中应该考虑使用实列属性 , 比如 self.x self.y

而不要取使用类属性, 通常类属性是仅用来跟踪与类相关的值

  1. class CC:
  2. def setXY(self,x,y):
  3. self.x = x
  4. self.y = y
  5. def printXY(self):
  6. print(self.x,self.y)
  7. dd =CC()
  8. dd.setXY(12,15)
  9. print(dd.__dict__)
  10. print(CC.__dict__)
  11. del CC
  12. ee =CC() # 打印报错信息, 因为CC类被删除了
  13. dd.printXY() # 能正常打印 12,15

相关的BlF 内置函数

issubclass(class, classinfo) class是classinfo 的子类吗

判断 class 是 classinfo 的子类 的话返回 True

  • 一个类被认为是其自身的子类
  • classinfo 可以是类对象元祖, 只要class 与其中任何一个候选的子类, 则返回True

没个候选的类 是否是他得到子类

  1. class A :
  2. pass
  3. class B(A) :
  4. pass
  5. class C:
  6. pass
  7. print(issubclass(B, A)) # 打印: True # 表示 B 是 A 的子类
  8. print(issubclass(B, B)) # 打印: True # 表示 B 本身可以看作子类
  9. print(issubclass(B, object)) # 打印: True # 表示 object 是所有类的基类
  10. print(issubclass(B, C)) # 打印: Flass # 表示 B 和 C 没有任何关系

isinstance(object,classinfo) 检测实例对象和属性是否一个类

检测实例对象和属性是否一个类的, 检查左边是否属于右边的

  • 如果第一个参数不是对象, 则永远返回False
  • 如果第二个参数不是类或者有类对象组成的元祖, 会抛出一个TypeError异常 ```python class A : pass

class B(A) : pass

class C: pass

b1 = B()

print(isinstance(b1, B)) # 打印: True ## b1 s是 B的实列化对象

print(isinstance(b1, A)) # 打印: True ## B 类是继承 了A类

print(isinstance(b1, C)) # 打印: False ## b1 和C类 没有关系

print(isinstance(b1, (A, B, C))) # 打印: True 也可以使用元祖的方法

  1. <a name="dkugh"></a>
  2. ### hasattr(object,name) 检测类对象是否有指定属性
  3. 测试对象 里面是否有指定属性
  4. ```python
  5. class C:
  6. def __init__(self,x =0):
  7. self.x = x
  8. c1 = C()
  9. print(hasattr(c1, "x"))

getattr(object,name[,default]) 返回类对象指定属性值

返回对象指定的属性值, 如果不存在 返回你设置的数据

  1. class C:
  2. def __init__(self,x =0):
  3. self.x = x
  4. c1 = C()
  5. print(getattr(c1, 'x', '您数访问的这个属性不存在'))

setattr(object,name,value) 设置类对象属性值

设置类对象的属性 与属性值

  1. class C:
  2. def __init__(self,x =0):
  3. self.x = x
  4. c1 = C()
  5. setattr(c1,'y', 20)
  6. print(getattr(c1, 'y', '没有这个数据'))
  7. -------------------------
  8. 20

delattr(object,name) 删除类对象的属性

如果删除不存在的 a 属性 则会报错

  1. class C:
  2. def __init__(self,x =0):
  3. self.x = x
  4. c1 = C()
  5. setattr(c1,'y', 20)
  6. delattr(c1,'y')
  7. print(getattr(c1, 'y', '没有这个数据'))
  8. -----------------------
  9. 没有这个数据

property() 返回供用户操作的属性

property(fget=none,fset=none,fdel=none,doc=none)

  • 获取属性
  • 设置属性
  • 删除属性

类是于 property 是个中转接口
通过属性 来 设置属性
它的作用在于
用户 只需要通过 x 来操作 获取, 设置, 删除 即可
开发在代码里改动后只需要 填到 property() 中即可

  1. class C:
  2. def __init__(self, size=10):
  3. self.size = size
  4. def getSize(self):
  5. return self.size
  6. def setSize(self, value):
  7. self.size = value
  8. def delSize(self):
  9. del self.size
  10. x = property(getSize, setSize, delSize)
  11. c1 = C()
  12. print(c1.x) # 获取属性
  13. c1.x=28 # 设置属性
  14. print(c1.x)
  15. del c1.x #删除属性
  16. print(c1.x)