首页 > 其他 > 详细

面向对象进阶

时间:2018-06-18 11:25:45      阅读:194      评论:0      收藏:0      [点我收藏+]

类成员

字段

  • 普通字段
    • 属于对象,存储在对象空间  
    • 使用self.字段名操作  
  • 静态字段
    • 属于类,存储在类空间,如果对象有重名字段,静态字段会被覆盖  
    • 使用类名.字段名访问  
    • 使用对象名.字段名访问  

方法

  • 普通方法
    • 由对象调用,至少一个self参数,  
    • 执行时自动将该方法的对象赋值给self  
  • 类方法
    • 定义时加上@classmethod装饰器  
    • 由类调用,至少一个cls参数  
    • 执行时自动将该方法的类赋值给cls  
  • 静态方法
    • 定义时加上@staticmethod装饰器  
    • 由类调用,无默认参数  

属性

普通属性
普通方法的变种,定义普通方法时加上@property装饰器
相关方法

isinstance(object,classinfo)和issubclass(class,classinfo)

isinstance用于判断object是否是classinfo、或classinfo直接、间接的子类的实例(instance),返回值为bool类型
classinfo可以是一个包含多个类的元组,只要object按照上面的规则符合其中一个就会返回True
issubclass用于判断class是否是classinfo、或classinfo直接、间接的子类,返回值为布尔类型

class A:
pass


class B(A):
pass


class C(B):
pass


class D:
pass

x = C()
# x是C的直接的实例
print(isinstance(x, C))
# x是B的间接的实例
print(isinstance(x, B))
# x不是D的实例
print(isinstance(x, D))

# classinfo可以是一个元组
print(isinstance(x, (A, D)))

# C是B的直接子类
print(issubclass(C, B))
# C是A的间接子类
print(issubclass(C, A))
# C不是D的子类
print(issubclass(C, D))
内置方法

__new__
当类开始实例化出对象时执行该方法
正常的实例化由object类的__new__执行该方法,并返回一个对象
通常使用该方法在实例化出对象时额外进行一些操作,然后返回object类的__new__
class A:
def __init__(self):
print(‘in init function‘)
self.x = 1

def __new__(cls, *args, **kwargs):
print(‘in new function‘)
return object.__new__(A, *args, **kwargs)
单例模式:
一个类仅有一个对象。
class Singleton:
def __new__(cls, *args, **kw):
if not hasattr(cls, ‘_instance‘):
cls._instance = object.__new__(cls, *args, **kw)
return cls._instance

one = Singleton()
two = Singleton()
three = Singleton()
print(one,two,three)
__init__
执行__new__之后执行该方法
__str__和__repr__
当打印对象时,会打印str的返回值
当str方法不存在,repr会代替str
__del__
当对象被del的时候执行方法
item系列 getitem用在从对象取值的时候使用方法内的返回值,setitem用于给对象的属性赋值操作,delitem用于删除对象的属性
__getitem__
__setitem__
__delitem__
class Foo:
def __init__(self):
self.name = ‘jack‘
self.age = 24

def __getitem__(self, item):
return self.__dict__[item]

def __setitem__(self, key, value):
self.__dict__[key] = value

def __delitem__(self, key):
del self.__dict__[key]
f = Foo()
print(f[‘name‘])
f[‘name‘] = ‘bob‘
del f[‘name‘]
__call__
定义在将对象当做函数调用时执行的方法
__len__
定义在对对象使用len函数时执行的方法
__hash__
定义在对对象使用hash函数时执行的方法
__eq__
定义在对两个对象使用==运算符时执行的方法
__add__
定义在对象相加时执行的方法
__mul__
定义在对象相乘时执行的方法
__setattr__
__getattr__
__delattr__
flask源码、请求上下文管理的类似本地线程功能
比本地线程更厉害,因为可以保证协程级别的数据不混淆
__enter__
上下文协议入口,需要返回值
__exit__
上下文协议出口

属于对象,存储在对象空间
使用self.字段名操作

面向对象进阶

原文:https://www.cnblogs.com/leiyiming/p/9194643.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!