一、成员修饰符
共有成员
私有成员:创建方式在成员之前加两个下划线,私有成员无法直接访问,只能间接访问
子类不能继承父类的私有属相
私有普通字段的访问方式:
class Fansik:
def __init__(self, name, age):
self.name = name
self.__age = age
def show(self):
return self.__age
obj = Fansik('fanjinbao', 12)
print(obj.name)
print(obj.show())
私有静态字段的访问方式:
class Fansik:
__name = 'fanjinbao'
@staticmethod
def state():
return Fansik.__name
print(Fansik.state())
或者
class Fansik:
__name = 'fanjinbao'
def show(self):
return Fansik.__name
obj = Fansik()
print(obj.show())
私有方法的访问方式:
class Fansik:
def __state(self):
return 123
def show(self):
return self.__state()
obj = Fansik()
print(obj.show())
二、特殊成员
__init__ 类()自动执行
__call__ 对象() 类()()自动执行
__int__ init(对象)
__str__ str(对象)
__dict__ 将对象中封装的所有内容通过字典的形式返回(包含注释)
__add__ 两个对象相加时,自动执行第一个对象的__add__方法,并且将第二个对象当做参数传递进入
__del__ 析构方法,对象销毁时自动执行
__iter__
class Fansik:
def __init__(self, name, age):
self.name = name
self.age = age
def __iter__(self):
return iter([11, 22, 33])
li = Fansik('fansik', 19)
for i in li:
print(i)
如果类中有__iter__方法,那创建出来的对象-->就是可迭代对象
可迭代对象.__iter__()的返回值,是一个迭代器
for循环遇到的迭代器,使用next
for循环遇到可迭代对象,通过对象.__iter__()获取迭代器,使用next
执行li对象的类Fansik中的__iter__方法,并获取其返回值
循环上一步中返回的对象
class Fansik:
def __init__(self, name, age):
self.name = name
self.age = age
def __setitem__(self, key, value):
print(key, value)
def __getitem__(self, item): # 切片(slice类型)或者是索引
return item + 100
def __delitem__(self, key):
print(key)
li = Fansik('fanjinbao', 19)
li[100] = 'zhansan'
print(li[100])
del li[100]
三、metaclass,原始类
Python中一切事物都是对象
class Fansik:
pass
obj = Fansik()
obj是对象,Fansik类
Fansik类是type的对象
类都是type类的对象,type(...)
"对象"都是以类的对象, 类()
class Fansik:
def func(self):
print('')
或者使用下面的方法声明一个类
def function(self):
print('')
Fansik = type('Fansik', (object,), {'func': function})
或者
Fansik = type('Fansik', (object,), {'func': lambda x: 123})
执行构造方法之前的需要执行的操作
class MyType(type):
def __init__(self, *args, **kwargs):
print(123)
pass
def __call__(self, *args, **kwargs):
print('') class Fansik(object, metaclass=MyType):
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
pass
def func(self):
print('hello world!!!') obj = Fansik()
在obj被创建之前先执行MyType中的__call__方法,__call__中的self是Fansik
obj是在__new__中被创建的
四、异常处理
try:
name = input('please enter your name : ')
i = int(name)
except IndexError as e:
print('IndexError')
except ValueError as e:
print('ValueError')
except Exception as e:
print('Exception')
else:
print('else')
finally:
print('finally')
1、如果输入错误则执行ValueError、finally
2、如果输入正确则执行else、finally 自定义异常和主动触发异常
# 自定义异常
class Fansik(Exception):
def __init__(self, msg):
self.message = msg
def __str__(self):
return self.message
try:
# 主动触发异常
raise Exception('fansik error...')
except Exception as e:
print(e)
断言:如果条件成立,继续执行,如果条件不成立,直接抛异常
用于强制用户服从,不服从就报错,可捕获,一般不捕获
print(123)
assert True
print(456) 五、反射
foor内容:
NAME = 'fanjinbao'
def func():
return 'func'
def f1():
return 'HOME'
def f2():
return 'NEWS'
def f3():
return 'CREAM'
根据输入内容打印请求内容:
import foor
imp = input('please ent you choice: ')
if hasattr(foor, imp):
func = getattr(foor, imp)
print(func())
else:
print('')
六、单例模式
class Fansik:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(self.name, self.age)
v = None
if v:
v.show()
else:
v = Fansik("fanjinbao", 19)
v.show()

Python基础-面向对象2的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  3. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

  4. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  5. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  6. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

    python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...

  7. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  8. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  9. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  10. python基础-面向对象(装饰器)

    属性:   @property   @method_name.setter   @method_name.deleter   三个标签都是放在方法的上面来使用,且方法名要和后续使用的   变量名字相一 ...

随机推荐

  1. QBC运算符含义

    HQL运算符                   QBC运算符                      含义      =                     Restrictions.eq() ...

  2. requireJS的匿名模块和命名模块的区别和最佳实践

    requirejs是一个简单的javascript框架,支持模块化编码和模块的异步载入. 在requireJS中模块能够分为:匿名模块和命名模块这2种. requireJS定义一个匿名模块 defin ...

  3. php服务器端与android客户端通信问题

    http://www.oschina.net/question/616446_90760

  4. php max_execution_time执行时间问题

    php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件 ...

  5. rgb2yuv

    1.rgb2yuv422p 代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线 ...

  6. 根本上解决npm install 报错“ajv-keywords@3.4.0 requires a peer of ajv@^6.9.1 but none is installed. You must install peer dependencies yourself.“

    每次项目npm install 的时候都报这个错误, 然后网上找的方法就把这个 ajv重新安装下,感觉有点麻烦, 后来有次我把npm更新了一下(我的版本是: 6.1.0),更新到了最新版本,这个问题就 ...

  7. 蓝桥杯 第四届C/C++预赛真题(6) 三部排序(水题)

    标题:三部排序 一般的排序有许多经典算法,如快速排序.希尔排序等. 但实际应用时,经常会或多或少有一些特殊的要求.我们没必要套用那些经典算法,可以根据实际情况建立更好的解法. 比如,对一个整型数组中的 ...

  8. _beginthreadex创建线程,立即执行?

    一个线程创建后,并不是立马就执行,而是等时间片到来后才执行...  C++ Code  12345678910111213141516171819202122232425262728293031323 ...

  9. Json对象与Json字符串互转(4种转换方式) jquery 以及 js 的方式

    http://blog.csdn.net/zero_295813128/article/details/51545467

  10. trait优先级 与 使用

    之前一直沒有讲到trait,在此我不得不提一下trait中的优先级: 在trait继承中,优先顺序依次是:来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法. For e ...