类与对象
1.继承
- 调用未绑定的父类方法 Fish.init(self)
- 使用super函数 super().init()
2.组合
class Turtle:
def __init__(self,x):
self.num=x
class Fish:
def __init__(self,x):
self.num=x
class Pool:
def __init__(self,x,y):
self.turtle=Turtle(x)
self.fish=Fish(y)
def Print_num(self):
print("水池里乌龟有%s只,鱼有%s只"%(self.turtle.num,self.fish.num))
p =Pool(2,3)
p.Print_num()
3.类,类对象,实例对象
#类对象
class A(object):
pass
#实例对象
# 实例化对象 a、b、c都属于实例对象。
a = A()
b = A()
c = A()
#类属性
class A():
a = 1 #类属性
def __init__(self):
A.a = 1 # #使用类属性可以通过 (类名.类属性)调用
#实例对象
#属性只能在自己的对象里面使用,其他的对象不能直接使用,因为 self 是谁调用,它的值就属于该对象
# class fun():#fun表示类名
# __init__(self):
# self.name=xx #实例属性
#创建类对象
class Text(object):
class_attr = 100 #类属性
def __init__(self):
self.sl_attr=100 #实例属性
def func(self):
print('类对象.类属性的值:',Text.class_attr)#调用类属性
print('self.类属性的值:',self.class_attr)#相当于把类属性变成了实例属性
print('self.实例属性的值:',self.sl_attr)#调用实例属性
a = Text()
a.func()
# 类对象.类属性的值:100
# self.类属性的值:100
# self.实例属性的值:100
print("================")
b = Text()
b.func()
# 类对象.类属性的值: 100
# self.类属性的值: 100
# self.实例属性的值: 100
print('===============')
a.class_attr = 200
a.sl_attr = 200
a.func()
# 类对象.类属性的值: 100
# self.类属性的值: 200
# self.实例属性的值: 200
print('===============')
b.func()
# 类对象.类属性的值: 100
# self.类属性的值: 100
# self.实例属性的值: 100
print('================')
Text.class_attr=300
a.func()
# 类对象.类属性的值: 300
# self.类属性的值: 200
# self.实例属性的值: 200
print('==============')
b.func()
# 类对象.类属性的值: 300
# self.类属性的值: 300
# self.实例属性的值: 100
4.绑定
# Python 对象的数据属性通常存储在名为 .__ dict__ 的字典中,我们可以直接访问 __dict__
# 或利用 Python 的内置函数 vars() 获取 .__ dict__
class cc:
def setxy(self,x,y):
self.x=x
self.y=y
def printxy(self):
print(self.x,self.y)
dd=cc()
print(dd.__dict__)
#{}
print(vars(dd))
#{}
dd.setxy(5,6)
print(dd.__dict__)
#{'x': 5, 'y': 6}
print(vars(dd))
#{'x': 5, 'y': 6}
5.一些相关的内置函数BIF
- issubclass(class, classinfo) 方法用于判断参数 class 是否是类型参数 classinfo 的子类
- isinstance(object, classinfo) 方法用于判断一个对象是否是一个已知的类型,类似 type()
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- hasattr(object, name) 用于判断对象是否包含对应的属性
- getattr(object, name[, default]) 用于返回一个对象属性值
- setattr(object, name, value) 对应函数 getattr() ,用于设置属性值,该属性不一定是存在的
- delattr(object, name) 用于删除属性
- class property([fget[, fset[, fdel[, doc]]]]) 用于在新式类中返回属性值