类是一系列方法与属性的抽象封装的一个集合体
面向对象的封装就体现在类里。
继承是一个子类继承父类的属性或者方法,但是无法继承父类的__get 双下划线方法,这是类似私有方法
继承
class Message():
def __init__(self):
pass
def send_msg(self):
print("send msg")
class subMsg(Message):
def sendmsg(self):
self.send_msg()
print("子类方法")
多态:同一个函数传入不同对象执行同一个方法
class Duck():
def eat(self):
print("duck eat")
class Lion():
def eat(self):
print("lion eat")
def Eat(obj):
obj.eat()
if __name__ == '__main__':
duck = Duck()
lion = Lion()
Eat(duck)
Eat(lion)
class TestProperty():
def __init__(self):
self.x = 100
def getPro(self):
return self.x
def setPro(self,value):
self.x = value
def delPro(self):
print("delete")
x = property(getx,setx,delx,"I am your father")
obj = TestProperty()
obj.x #执行这个getx
obj.x = 123 #调用set函数
print(obj.x)
del obj.x
执行结果如下
100 xxx
set
123
delete
在创建了这个property的对象后,默认obj.x #执行这个getx
obj.x = 123 #调用set函数 del obj.x执行del函数
类的 getitem. setitem
class Student():
def __setitem__(self, key, value):
print(key,value)
def __getitem__(self, item):
print(item)
s1 = Student()
#加了__getitem__. setitem 会支持如下操作
s1[“hello”] = ‘world’
print(s1[“hello”])
init() new
#创建对象首先调用__new__创建一个空对象,然后通过这个init进行初始化操作。
对象加括号会调用__call__方法
__enter__ 执行with时触发,返回值给as
__exit__ 退出with执行
with fileTest as t:
t.cusor()
比如在enter中创建数据库连接句柄,在exit中关闭
class FileTest():
def __enter__(self):
print("")
sql_conn = "数据句柄"
return sql_conn
def __exit__(self, exc_type, exc_val, exc_tb):
print("db close")
print("exit")
hasattr(obj,"attr") setattr(obj,"attr")
getattr(obj,"attr")