类:

类是将抽象的实物进行的划分。

在现实世界中如果我们将:

人类包含:男人、女人、孩子、老人等
动物类包含:小猫、小狗、小兔子等 在代码世界中我也可以分类,例如将相同功能的代码放到一起,这就是分类。

对像:

对像是类的实体,你、我、他、小强、小明都可以是一个实体对像。

方法:

每个人的动作可以看作是方法,例如说吃饭、洗脸、说话。

继承:

不论是老年人、中年人还是青年人,这三个年龄段的人最后都归属人这个大类,也就是继承人的特点。

封装:

每个人头脑里记忆的东西只有自己可以使用,另一个人无法使用。这对于另一个人来说就是封装。

多态:

有人吃饭快,有人吃饭慢,有人吃的多,有人吃的少,这就是多态。

在代码中:

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

创建类:

class people():
"""A simple example class"""
def man(self):
print('这是一个男人。')
def woman(self):
print('这是一个女人。') x = people() #实例化类
x.man() #执行函数
x.woman() #执行函数 以上实例输出结果:
这是一个男人。
这是一个女人。

类示例

一、函数封装:

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处
  • 从某处调用被封装的内容

在内存里就是:

在类中调用默认函数:

class people():
def __init__(self,name,age): #默认函数
self.test = name
self.test1 = age
#注self.后面的变量名可以不定要去形参相同,例如第二个变量。
def statu(self):
print('name: %s,ege:%s' %(self.test,self.test1))
#在其他函数调用要加self x = people('earl','') #将earl、20封装到x的中.
x.statu() 以上实例输出结果:
name: earl,ege:20

函数调用

二、继承:

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

1、继承一个:

class A(object):
n = 'A'
def f2(self):
print("f2 from A")
class B(A):
n = 'B'
def f1(self):
print("from B") 以上实例输出结果:
from B
f2 from A

继承一个

2、继承多个:

class A(object):
n = 'A'
def f2(self):
print("f2 from A")
class B(A):
n = 'B'
def f1(self):
print("from B")
class C(A):
n = 'C'
def f2(self):
print("f2 from C")
class D(B,C):
'''Test class''' # def __del__(self):
# print("deleteing the ...")
d = D()
d.f1()
d.f2() 以上实例输出结果:
from B
f2 from C

继承多个

多继承优先级别:

class A:
n = 'A'
def f2(self):
print("f2 from A")
class B(A):
n = 'B'
def f1(self):
print("from B")
# def f2(self):
# print("f2 from B")
class C(A):
n = 'C'
def f2(self):
print("f2 from C")
class D(B,C):
'''Test class''' d = D()
d.f1()
d.f2()

多继承优先级别

python2.x版本中:

经典类:首先去D类中查找,如果D类中没有,则继续去B类中找,如果B类中么有,则继续去A类中找,如果A类中么有,则继续去C类中找,如果还是未找到,则报错

新式类:首先去D类中查找,如果D类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去A类中找,如果还是未找到,则报错

python3.x版本中:

经典类:首先去D类中查找,如果D类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去A类中找,如果还是未找到,则报错

新式类:首先去D类中查找,如果D类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去A类中找,如果还是未找到,则报错

注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

三、多态:

Python不支持多态,在开发中也用不到多态。

父类调用子类:

class Animal:
def __init__(self, name):
self.name = name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!' def animal_talk(obj):
print(obj.talk()) c = Cat("jack")
d = Dog("tom")
animal_talk(c)
animal_talk(d) 以上实例输出结果:
Meow!
Woof! Woof!

父类调用子类:

四、公有属性私有属性:

私有属性就是在变量前面加两个下划线。

class X:
def __init__(self):
self.name = '公有字段'
self.__foo = "私有字段"

私有成员只能在类内部使用

class X:
__name = "私有字段"
foo = '公有字段'
def func(self):
print(X.__name)
class D(X): def show(self):
print(X.__name)
Y = X()
Y.func() # 类内部可以访问正常 Z = D()
Z.show() #外部类访问报错

私有属性访问

五、类的特殊成员:

1. __doc__

  表示类的注释信息

class Foo:
""" 此类备注信息 """ def func(self):
pass print(Foo.__doc__) 以上实例输出结果:
此类备注信息

__doc__实例:

2. __module__ 和  __class__

  __module__ 表示当前操作的对象在那个模块

  __class__     表示当前操作的对象的类是什么

class X:
def __init__(self):
self.name = 'earl'

模块

import aa

obj = aa.X()
print(obj.__module__)# 输出 aa,即:输出模块
print(obj.__class__) # 输出 aa.X,即:输出类 以上实例输出结果:
aa
<class 'aa.X'>

调用

3、__init__初始函数:

class people():
def __init__(self,name,age): #默认函数
self.test = name
self.test1 = age
#注self.后面的变量名可以不定要去形参相同,例如第二个变量。 x = people('earl','') #将earl、20封装到x的中. #调用:
print(x.test) #调用X对像中的test属性
print(x.test1) #调用X对像中的test1属性

__init__:示例

4、__dict__:

以字典形式显示:

class Province:

    country = 'China'

    def __init__(self, name, count):
self.name = name
self.count = count def func(self, *args, **kwargs):
print('func') # 获取类的成员,即:静态字段、方法、
print(Province.__dict__)
# 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None} obj1 = Province('HeBei',10000)
print(obj1.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 10000, 'name': 'HeBei'} obj2 = Province('HeNan', 3888)
print(obj2.__dict__)
# 获取 对象obj1 的成员
# 输出:{'count': 3888, 'name': 'HeNan'}

__dict__实例

六、反射:

python中的反射是使程序能够通过参数调用类中的成员。

反射由四个内置函数提供:

hasattr  #判断是某个成员是不存在。

getattr  #获取成员

setattr  #添加成员到实例里(注:此函数是将函数添加到实例化的对像里,而不是添加到类里。)

delattr  #删除成员(注:此函数是参数类里成员。)

1、hasattr与getattr

hasattr与getattr要配合使用:

import sys

class WebServer(object):
def __init__(self,host,port):
self.host = host
self.port = port
def start(self):
print('server is starting....') def stop(self):
print('serer is stopping....') def restart(self):
self.stop()
self.start() def test_run(name,t1):
print('run.....',name,t1.host) if __name__ == '__main__':
server = WebServer('localhost',123)
if hasattr(server,sys.argv[1]): #判断输入sys.argv[1]在不在server这个实例里。
func = getattr(server,sys.argv[1]) #获取server.start的内存地址
func() 执行代码:python test.py start 结果如下:
server is starting....

hasattr与getattr

2、setattr

import sys

class WebServer(object):
def __init__(self,host,port):
self.host = host
self.port = port
def start(self):
print('server is starting....') def stop(self):
print('serer is stopping....') def restart(self):
self.stop()
self.start() def test_run(name,t1):
print('run.....',name,t1.host) if __name__ == '__main__':
server = WebServer('localhost',123)
setattr(server,'run',test_run) #将test_run函数以run的别名添加到server实例中。
server.run('earl',server) #调用函数。 运行代码:python test.py start 运行结果:
run..... earl localhost

setatt示例:

3、delattr:

import sys

class WebServer(object):
def __init__(self,host,port):
self.host = host
self.port = port
def start(self):
print('server is starting....') def stop(self):
print('serer is stopping....') def restart(self):
self.stop()
self.start() def test_run(name,t1):
print('run.....',name,t1.host) if __name__ == '__main__':
server = WebServer('localhost',123)
delattr(WebServer,'start') #删除类里的start函数。
delattr(server,'host') #删除类里的host属性。
server.host 运行代码:python test.py start 执行结果会报错:
AttributeError: 'WebServer' object has no attribute 'host' 因为已经将host删除了。

delattr

Python学习之路——类的更多相关文章

  1. Python学习之路——类-面向对象编程

    类 面向对象编程 通过类获取一个对象的过程 - 实例化 类名()会自动调用类中的__init__方法 类和对象之间的关系? 类 是一个大范围 是一个模子 它约束了事务有哪些属性 但是不能约束具体的值 ...

  2. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  3. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  4. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  5. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  6. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  7. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  8. Python学习 Part7:类

    Python学习 Part7:类 1. 作用域和命名空间 命名空间(namespace)就是一个从名称到对象的映射. 命名空间的一些实例:内置名称集(函数,像abs(),和内置异常名称),一个模块中的 ...

  9. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

随机推荐

  1. 让你提前知道软件开发(24):C语言和主要特征的发展史

    文章1部分 再了解C语言 C语言的发展历史和主要特点 作为一门众所周知的计算机编程语言,C语言是谁发明的呢?它是怎样演进的?它有何特点?究竟有多少人在使用它? 1. C语言之父 C语言是1972年由美 ...

  2. Android仿人人客户端(v5.7.1)——个人主页(三)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/9405089 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编 ...

  3. 使用 system.io.filesysteminfo 来查找文件。

    如何快速搜索你想找到文件呢.大家知道Windows系统自带了搜索,很方便,下面介绍自己编写的也可以达到同样的效果.注意.有些文件的访问需要更高的权限.这里暂且去掉那些文件目录的搜索.不然会出现erro ...

  4. LOJ 1341 Aladdin and the Flying Carpet(质因子分解)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 题意:给两个数a,b,求满足c * d = a且c>=b且d>=b的 ...

  5. Problem E: Product

    Problem E: ProductTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submit][Status][Web Bo ...

  6. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

  7. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

  8. hadoop配置及无法移动文件到hdfs故障解析

    首先博主用的64位ubuntu,hadoop官方只提供32位版本,这样的话启动本地库无法兼容,需要自己编译为64位版本,或下载别人编译好的64位版本. 下载好需要在etc/hadoop目录下改动以下几 ...

  9. spss

    编辑 SPSS(Statistical Product and Service Solutions),“统计产品与服务解决方案”软件.最初软件全称为“社会科学统计软件包” (SolutionsStat ...

  10. Loggerly技术架构

    https://www.loggly.com/blog/topic/log-management-technology/