python 面向对象
2018-08-31 18:54:02 0 举报
AI智能生成
python 面向对象
作者其他创作
大纲/内容
成员
变量
实例变量
class Foo(object):
<br> def __init__(self,a1,a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br>
<br> def func(self):
<br> print(self.a1,self.a2)
<br>
<br>obj = Foo(23,12)
<br>obj.func()
<br>print(obj.a2)
类变量
class Foo(object):
<br> content = '类变量'
<br>
<br> def func(self):
<br> print(self.content)
<br>
<br>
<br>print(Foo.content)
<br>obj = Foo()
<br>obj.func()
方法
实例方法
class Foo(object):
<br> def __init__(self,a1,a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br>
<br> def func(self):
<br> print(self.a1,self.a2)
<br>
<br>obj = Foo('a1','a2')
<br>obj.func() <br>
类方法
class Foo(object):
<br>
<br> @classmethod
<br> def func(cls,x1,x2):
<br> print(cls,x1,x2)
<br>
<br>Foo.func(1,2) <br>
静态方法
class Foo(object):<br><br><br><br> @staticmethod<br><br> def func():<br><br> print('23333')<br><br><br><br>Foo.func()<br>
属性
class Foo(object):
<br>
<br> @property
<br> def func(self):
<br> print('666')
<br>
<br>obj = Foo()
<br>obj.func
特殊成员
__init__
类名() 自动执行__init__
class Foo(object):
<br>
<br> def __init__(self,a1,a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br>
<br>obj = Foo(1,2)
__call__
对象() 自动执行__call__
class Foo(object):
<br>
<br> def __call__(self, *args, **kwargs):
<br> print(1111,args,kwargs)
<br> return 123
<br>
<br>obj = Foo()
<br>ret = obj(6,4,2,k1=456)
__getitem__
对象['xx'] 自动执行__getitem__
class Foo(object):
<br>
<br> def __getitem__(self, item):
<br> print(item)
<br> return 8
<br>obj = Foo()
<br>ret = obj['yu']
<br>print(ret)
__setitem__
对象['xx'] = 11 自动执行__setitem__
class Foo(object):
<br>
<br> def __setitem__(self, key, value):
<br> print(key, value, 111111111)
<br>obj = Foo()
<br>obj['k1'] = 123
__delitem__
del 对象[xx] 自动执行__delitem__
class Foo(object):
<br>
<br> def __delitem__(self, key):
<br> print(key)
<br>obj = Foo()
<br>del obj['uuu']
__add__
对象+对象 自动执行__add__
class Foo(object):
<br> def __init__(self, a1, a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br> def __add__(self,other):
<br> return self.a1 + other.a2
<br>obj1 = Foo(1,2)
<br>obj2 = Foo(88,99)
<br>ret = obj2 + obj1
<br>print(ret)
__enter__ / __exit__
with 对象 自动执行__enter__ / __exit__
class Foo(object):
<br> def __init__(self, a1, a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br> def __enter__(self):
<br> print('1111')
<br> return 999
<br>
<br> def __exit__(self, exc_type, exc_val, exc_tb):
<br> print('22222')
<br>obj = Foo(1,2)
<br>with obj as f:
<br> print(f)
<br> print('内部代码')
__new__
构造方法
class Foo(object):
<br> def __init__(self, a1, a2): # 初始化方法
<br> """
<br> 为空对象进行数据初始化
<br> :param a1:
<br> :param a2:
<br> """
<br> self.a1 = a1
<br> self.a2 = a2
<br>
<br> def __new__(cls, *args, **kwargs): # 构造方法
<br> """
<br> 创建一个空对象
<br> :param args:
<br> :param kwargs:
<br> :return:
<br> """
<br> return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).
<br>
<br>obj1 = Foo(1,2)
<br>print(obj1)
<br>
<br>obj2 = Foo(11,12)
<br>print(obj2)
其他相关
callalble
判断一个对象是否是可执行的
def func():
<br> pass
<br>
<br>
<br>class Foo(object):
<br> def __call__(self, *args, **kwargs):
<br> pass
<br> def func(self):
<br> pass
<br>obj = Foo()
<br>
<br>
<br>print(callable(func))
<br>print(callable(Foo))
<br>print(callable(obj))
<br>print(callable(obj.func)) <br>
反射
getattr
根据字符串形式,去对象中查找成员
from types import FunctionType
<br>import handler
<br>
<br>while True:
<br> print("""
<br> 系统支持的函数有:
<br> 1. f1
<br> 2. f2
<br> 3. f3
<br> 4. f4
<br> 5. f5
<br> """)
<br> val = input("请输入要执行的函数:") # val = "f1"
<br>
<br> # 错误
<br> # handler.val()
<br> if hasattr(handler,val):
<br> func_or_val = getattr(handler,val) # 根据字符串为参数,去模块中寻找与之同名的成员。
<br> if isinstance(func_or_val,FunctionType):
<br> func_or_val()
<br> else:
<br> print(func_or_val)
<br> else:
<br> print('handler中不存在输入的属性名')
class Account(object):
<br> func_list = ['login', 'logout', 'register']
<br>
<br> def login(self):
<br> """
<br> 登录
<br> :return:
<br> """
<br> print('登录111')
<br>
<br> def logout(self):
<br> """
<br> 注销
<br> :return:
<br> """
<br> print('注销111')
<br>
<br> def register(self):
<br> """
<br> 注册
<br> :return:
<br> """
<br> print('注册111')
<br>
<br> def run(self):
<br> """
<br> 主代码
<br> :return:
<br> """
<br> print("""
<br> 请输入要执行的功能:
<br> 1. 登录
<br> 2. 注销
<br> 3. 注册
<br> """)
<br>
<br> choice = int(input('请输入要执行的序号:'))
<br> func_name = Account.func_list[choice-1]
<br>
<br> # func = getattr(Account,func_name) # Account.login
<br> # func(self)
<br>
<br> func = getattr(self, func_name) # self.login
<br> func()
<br>
<br>obj1 = Account()
<br>obj1.run()
<br>
<br>obj2 = Account()
<br>obj2.run()
hasattr
根据字符串形式,去判断对象中是否有成员
setattr
根据字符串形式,动态地设置一个成员(内存)
delattr
根据字符串形式,动态删除一个成员(内存)
三大特性
封装
数据封装
class Foo(object):
<br>
<br> def __init__(self,a1,a2):
<br> self.a1 = a1
<br> self.a2 = a2
<br>
<br>obj = Foo(23,24)
方法封装
class Foo(object):
<br>
<br> def func1(self):
<br> pass
<br>
<br> def func2(self):
<br> pass
<br>
<br>obj = Foo()
继承
单继承
class Foo(object):
<br>
<br> def func1(self):
<br> pass
<br>
<br>
<br>class Base(Foo):
<br> pass
<br>
<br>obj = Base()
<br>obj.func1()
多继承
class Foo(object):
<br>
<br> def func1(self):
<br> pass
<br>
<br>
<br>class Base(object):
<br>
<br> def func2(self):
<br> pass
<br>
<br>class Bar(Base,Foo):
<br> pass
<br>
<br>obj = Bar()
<br>obj.func1()
<br>obj.func2()
super()
class Foo(object):
<br>
<br> def func1(self):
<br> super().func1
<br> print('Foo func1')
<br>
<br>class Base(object):
<br>
<br> def func1(self):
<br> print('Base func1')
<br>
<br>class Bar(Base,Foo):
<br> pass
<br>
<br>obj = Bar()
<br>obj.func1()
C3算法
经典类,一条道走到黑(深度优先)。
<br> 新式类,C3算法实现(python2.3更新时c3算法)。
<br>
<br> Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W)
<br>
<br> Foo, I,B,
<br> 获取第一个表头 和 其他表位进行比较
<br> 不存在则拿走。
<br> 如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
__mro__
查询执行顺序
issubclass
class Base(object):
<br> pass
<br>
<br>class Foo(Base):
<br> pass
<br>
<br>class Bar(Foo):
<br> pass
<br>
<br>print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
type
class Foo(object):
<br> pass
<br>
<br>obj = Foo()
<br>
<br>print(obj,type(obj)) # 获取当前对象是由那个类创建。
<br>if type(obj) == Foo:
<br> print('obj是Foo类型')
isinstance
class Base(object):
<br> pass
<br>
<br>class Foo(Base):
<br> pass
<br>
<br>obj1 = Foo()
<br>print(isinstance(obj1,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
<br>print(isinstance(obj1,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
<br>
<br>
<br>obj2 = Base()
<br>print(isinstance(obj2,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
<br>print(isinstance(obj2,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。
多态
鸭子模型
修饰符
私有
class Foo(object):<br><br> def __init__(self,a1,a2):<br><br> self.__a1 = 23 # 私有实例变量<br><br> self.a2 = 63<br><br><br><br> def __func(self): # 私有实例方法<br><br> print(self.__a1,self.a2)<br><br><br><br> def func1(self):<br><br> self.__func()<br><br><br><br>obj = Foo(23,12)<br><br>obj.func1() # 派生类也不可以调用
博客园
0 条评论
下一页