Python笔记总结week8
面向对象第二节
要点:
1. 封装,对象中嵌套对象
2. pickle,load,切记,一定要先导入相关的类
回顾上一节:
面向对象三大特性:
封装、继承、多态(多种类型、多种形态)
关于多态,任意参数的函数有如下特性:
def func(arg):
print(arg)
func(1)
func("Alex")
func([11,22,33])
关于arg参数:
class A:
pass
class B(A):
pass
class C(A):
pass
#arg参数,必须是A类型或是A的子类类型
def func(A arg):
print(arg) #obj = B()
#obj = C()
obj = A()
func(obj)
面向对象中类成员
字段:静态字段、普通字段
P.S:静态字段代码加载的时候已经创建
class Foo:
#字段(静态字段)
CC = 123 def __init__(self):
#字段(普通字段)
self.name = "Alex" def show(self):
print(self.name)
class province:
country = "China"
def __init__(self,name):
self.name = name
#一般情况,自己访问自己字段
#规则:
#普通字段只能用对象访问
#静态字段用类访问(万不得已时用对象访问)
hn = province("Henan")
hb = province("Hebei")
print(hn.name) #Henan
print(province.country) #China
print(hn.country) #China
方法:
所有的方法属于类
1.普通方法,至少一个self,对象执行
2.静态方法,任意参数,类执行(对象执行)
3.类方法,至少一个class,类执行(对象执行)
class province:
country = "China" def __init__(self,name):
self.name = name
#普通方法,用对象去调用执行(方法属于类) def show(self):
print(123) @staticmethod
def f1(cla,arg1,arg2):
print(arg1,arg2)
#静态方法,用类调用执行.(当方法内部不需要对象中封装的值时,可以将方法写成静态方法) @classmethod
def f2(cls): #class
cls #类名,()创建对象
#cls()
print(cls) obj = province("Henan")
obj.show() #
province.f1(province,1,2) #1 2
province.f2() #<class '__main__.province'>
class pager:
def __init__(self,all_count):
self.all_count = all_count
@property
def all_pager(self):
a1,a2 = divmod(self.all_count,10)
if a2 == 0:
return a1
else:
return a1 +1
@all_pager.setter
def all_pager(self,value):
print(value)
@all_pager.deleter
def all_pager(self):
print("del all_pager")
p = pager(101)
print(p.all_count) #字段,101
#result = p.all_pager()#方法
ret = p.all_pager
print(ret) #
p.all_pager = 111 #
del p.all_pager #del all_pager
属性:
不伦不类的东西
具有方法的写作形式,具有字段的访问形式
class foo:
__cc = ""
def __init__(self,name):
self.name = name
def f1(self):
print(self.name)
obj = foo('alex')
print(obj.name) #alex
obj.f1() #alex
class Foo:
__cc = ""
def __init__(self,name):
self.name = name #定义一个私有的普通字段
def f1(self):
print(self.name)
@staticmethod
def f3():
print(Foo.__cc)
#print(Foo.__cc)
obj = Foo("ddd")
obj.f3() #
Foo.f3() #
私有普通方法
class Foo:
__cc = ""
def __init__(self,name):
self.__name = name #定义一个私有的普通字段
def f1(self):
print(self.__name)
class Bar(Foo):
def f2(self):
print(self.__name)
obj = Bar("alex")
obj.f1() #alex #通过调用类中的公有方法来执行私有方法
私有静态法
class Foo:
def __init__(self,name):
self.__name = name #定义一个私有的普通字段
@staticmethod
def f2(num):
print(num)
@staticmethod
def f3(num):
print(num)
Foo.f3(10) #
class Foo:
#构造方法
def __init__(self,name,age):
self.name = name
self.age = age #析构方法
def __del__(self):
pass def __call__(self):
print("call") def __str__(self):
return("%s-%d"%(self.name,self.age)) '''obj = Foo()
obj() #对象()执行call
#Foo()()''' obj1 = Foo('alex',74)
obj2 = Foo('eric',93)
print(obj1,obj2) #alex-74 eric-93 ret =str(obj1)
print(ret) #alex-74 #获取对象中封装的数据
ret = obj1.__dict__
print(ret) #{'name': 'alex', 'age': 74}
Python笔记总结week8的更多相关文章
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
- python笔记 - day7
python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...
随机推荐
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- ExecutorService线程池应用
//线程数量 int threadNum = lists.size(); //创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(t ...
- 添加 index_combine hint的索引
想试验一下 index_combine这个hint,于是做了如下试验. 1.创建一个具有若干index的表 SQL> create table test as select object_id, ...
- PS切图篇
一.PS界面设置 1.新建(ctrl+n) 初始化尺寸参数 预设:自定 宽度:1920px 高度:自设(如:2000px) 分辨率:72像素/英寸 颜色:RGB/8位 背景内容:透明 存储为预设 2. ...
- heart beat/心跳包
为什么需要heart beat/心跳包?因为tcp keep-alive不能满足人们的实时性的要求,就是这么简单. socket的长时间连接的话,是需要心跳包.心跳包就是维持双方的连接,每隔一段时间发 ...
- php : 基础(6)
数组 数组基础 含义: 数组就是一系列数据的集合体,他们按设定的顺序排列为一个"链的形状". 注意:php中的数组单元的顺序,跟下标无关! 数组定义(赋值): $arr1 = ar ...
- URL编码和解码工具
开发中发现需要进行URL的编解码,每次百度出来的还带广告而且比较慢,写了一个本地的工具,比较简单,希望对大家有帮助. <!DOCTYPE html PUBLIC "-//W3C//DT ...
- (转)pymysql 连接mysql数据库---不支持中文解决
往数据库里插入中文时出现异常:UnicodeEncodeError: 'latin-1' codec can't encode characters 就是编码的问题,pymysql默认的编码是lati ...
- 常见的js 里对数字进行处理的函数方法集合
常见的对小数值舍入为整数的几个方法:Math.ceil().Math.floor()和Math.round(). 这三个方法分别遵循下列舍入规则: Math.ceil()执行向上舍入,即它总是将数值向 ...
- PHP curl 实现RESTful PUT DELETE 实例
PHP curl 实现RESTful PUT DELETE 实例 客户端 client.php <?php //PUT $curl_handle = curl_init ();// Set de ...