python类

一,类

1,类是摸板,里面有组合数据,实现功能的方法。
2,类里面有可以改变自身的方法__init__函数
3,类和模块类似,运行时创建,创建后修改
4,类成员通常是public,成员函数virtual
5,python提供的内置类型类,可以作为父类来继承

二,类为模板

1,属性引用
Moduel_Name.func_name 对模块中名称的引用称为属性引用。
Moduel_Name 是一个模块对象,fun_name是它的属性。
模块的属性和模块中定义的全局名称之间存在映射关系:它们共享一个命名空间!

2 ,属性
可以只读或者只写,如果可写,模块的属性可以赋值,可以删除
Moduel_Name.var = 10
del Moduel_Name.var 会从Moduel_Name对象中移除var属性

3,类里面定义的变量

  • 类里面定义函数
	>>> class MyClass:...     def say_hello(): # 标准是带self的参数...             print('hello world!')...>>> MyClass<class '__main__.MyClass'>>>> MyClass.say_hello() # 属性引用hello world!>>>

类里面函数可能还有self 的参数
一个类(全局命名空间)里面的作用域是局部作用域
通过创建对象使得类里面的局部作用域生效

  • 一个有属性,函数的类demo
class MyClass:''' 这是一个py类的annotation '''# 类的属性i = 99# 类的初始化方法def __init__(self):self.data = []# 类的自定义函数  def say_hello(self):return 'hello world'

4,类对象

  • 访问类里面的元素有两种方法:属性引用和实例化

  • 属性引用:

MyClass.var
  • 实例化
    类的实例使用函数表示法
x = MyClass()
  • 类的构造方法
class Test:def __init__(self):print('这是py类的构造方法,用来初始化这个类')def __init__(self, name):print(name)''' 当一个类定义了 __init__() 方法时,类的实例化操作(t = Test('rye'))自动为新创建的类实例发起调用 __init__()。两个init会被调用。只是第一个__init__会被覆盖。'''
  • init里面的局部名称属于实例对象
class MyClass:''' 这是一个py类 有两个init初始化类的方法,创建类后所有init里面的局部变量就会存在__init__self后面参数没被赋值就是None'''i = 99def __init__(self):self.data = []def __init__(self, count): # 第二个__init__覆盖第一个self.c = countdef say_hello(self):return 'hello world'# !上面的类要实例化时,注意传入参数,按照__init__的self后面是否有其它参数。'''
MyClass.c 这样访问时错误的,c输入实例对象。
'''

5,实例对象 ==> 自定义对象产生的

  • 实例对象的操作是属性引用(数据属性和方法)
  • 数据属性不需要在类里面声明,像局部变量一样,第一次赋值时产生。
  • 数据属性可以根据类对象无中生有
  • counter就是实例对象的属性引用
# 接着上面的类
me = MyClass(None)
def my_obj():me.counter = 0while me.counter < 20:me.counter += 1print(me.counter)my_obj()
# del me.counter 不删除就会存在
  • 实例方法,是类对象调用类的函数
	Me = MyClass(None)Me.say_hello() 就是一个方法对象而MyClass.say_hello(None) 就是一个函数对象

6, 方法对象

me = MyClass(None)
# 方法对象
def test_func_obj():val = me.say_hello() # 用实例对象调用类的函数while True:print(val) test_func_obj()print("me.say_hello()相当于  MyClass.say_hello(me)")

♥注意

  • 方法的特殊之处就在于实例对象会作为函数的第一个参数被传入。 实例对象取代了self。
  • 总之,调用一个具有 n 个参数的方法就相当于调用再多一个参数的对应函数, 这个参数值为方法所属实例对象,位置在其他参数之前。

7,类和实例变量

  • 类对象的属性,函数属于所有对象 self属于某个对象。
# 类和实例变量
class Dog:name = 'kid'def __init__(self, color):self.color = color# 实例变量属于对象,类变量被对象共享
d1 = Dog('black') 
d2 = Dog('yellow') 
print(d1.name, d1.color, '\n', d2.name, d2.color)
'''
kid blackkid yellow
'''# color是每个对象具有的,name被共享d1.name = 'jack'
print(d1.name, d1.color, '\n', d2.name, d2.color)
'''
改变类变量后,
jack black kid yellow
'''
  • 用__init__来解决类变量共享
# 类变量的错误设计,不该出现数据共享
class Dog:tricks = []def __init__(self, name):self.name = namedef add_trick(self, trick):self.tricks.append(trick)d = Dog('d1')
dd  = Dog('d2')
d.add_trick('jump!')
dd.add_trick('roll!')
print(d.tricks) 
print(dd.tricks) 
''' ['jump!', 'roll!'] 两只狗都会了['jump!', 'roll!']
'''# 正解
class Dog():def __init__(self, name):self.name = nameself.tricks = [] # 属于每个对象,是单独的def add_trick(self, trick):self.tricks.append(trick)d = Dog('d1')
dd  = Dog('d2')
d.add_trick('jump!')
dd.add_trick('roll!')
print(d.tricks)
print(dd.tricks)
'''
['jump!']
['roll!']
'''

有点懵,但还好,会用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Coursera视频不能播放问题

1&#xff0c;打开C:\Windows\System32\drivers\etc目录&#xff1b; 2&#xff0c;修改host文件&#xff0c;在最后添加52.84.246.72 d3c33hcgiwev3.cloudfront.net&#xff0c;保存&#xff1b; 3&#xff0c;重启浏览器或者刷新Coursera视频网址&#xff0c;搞定。

Web Form要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...

1.先将aspnet.scriptmanager.jquery.dl 复制到bin (网站根目录下的bin文件夹找不到&#xff0c;看看下面的图片中点击[显示所有文档]) 文件夹下。 2.在网站根目录下scripts文件夹,向里边添加jquery-1.7.2.min.js和jquery-1.7.2.js(可根据自己需要使用不同的版本&#xff09;…

python继承多重继承

一&#xff0c;基本语法 class MyClass(BaseClass):def __init__(self):print(...)class MyDefineClass(object):def __init__(self):print(继承自object类)MyDefineClass.__init__(None) # 属性访问 me MyDefineClass() # 实例对象 继承自object类 继承自object类 二&#x…

第14章 任务和特权级保护

学习这一章感觉异常的困难&#xff0c;所以学习从14-17章&#xff0c;每一章学扎实了&#xff0c;弄懂了每个问题再进行下一章&#xff0c;后一章都是在前一章的基础上增加一些数据结构和机制。另外读的时候可以各个击破&#xff0c;每次只搞明白一个小问题。读这一章可能需要两…

python 生成器推导式

# 生成器 generator 用yield来返回数据 def reverse(data):for i in range(len(data) - 1, -1, -1): # range(start, end, step) 不包括endyield data[i]def test_generator():for char in reverse(abc):print(char)# test_generator()c b a生成器表达式&#xff1a;与列表推导…

Windows XP系统安装SQL Server 2005(开发版)图解

转自Windows XP系统安装SQL Server 2005(开发版)图解 安装前提:由于有些从网上的下载的项目需要导入SQL Server 2005的数据文件&#xff0c;因此&#xff0c;今天便安装了这个数据库&#xff0c;我的系统中已经安装了SQL Server2000所以是在它之上安装SQL Server2005的。 一、数…

《软件工程(C编码实践篇)》课后感

Fibonacci&#xff08;与最后申请证书的姓名务必一致&#xff09; 原创作品 《软件工程&#xff08;C编码实践篇&#xff09;》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 1&#xff08;20分&#xff09;软件工程&#xff08;C编码实践篇&#xff09;学习总…

用turtle画各种各样的数学图形

ps&#xff0c;用turtle导入小海龟来画图。画图代码都要导入海龟库哦&#xff0c;见下面第一行。 import turtle as t直线 # 画直线 def draw_line():pen t.Pen()pen.fd(200) # 直线默认水平方向 draw_line() 画正方形 def draw_square():pen t.Pen()for i in range(4): …

从网络字节流中提出整数

最近在做一个项目&#xff0c;就是设计一套通信协议&#xff0c;利用nginx来实现解析。协议内容是包括整数和字符串&#xff0c;现在客户端收到服务器端发送的网络字节流时&#xff0c;需要从中提取出整数&#xff0c;再根据整数决定发送数据量的大小。如下所示&#xff1a; p …

实验3 系统调用

系统调用 实验目的 建立对系统调用接口的深入认识掌握系统调用的基本过程能完成系统调用的全面控制为后续实验做准备 实验内容 此次实验的基本内容是&#xff1a;在Linux 0.11上添加两个系统调用&#xff0c;并编写两个简单的应用程序测试它们。 iam() 第一个系统调用是iam()&a…

python标准库(一)

操作系统接口os 切换目录 >>> import os>>> os.getcwd() # 得到当前工作目录C:\\Users>>> os.chdir(F:\\) # 切换工作目录到F盘>>> os.system(mkdir tody) # 在f盘创建一个叫tody的文件夹0import os 与 from os import * &#xff0c;要…

[Java] webservice soap,wsdl 例子

java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟&#xff0c;但要真正要用起来还需时日!! 由于毕业设计缘故&#xff0c;我看了很多关于webservice方面的知识&#xff0c;今天和大家一起来研究研究webservice的各种使用方法。 一、利用jdk web服务api…

C语言ASM汇编内嵌语法zz

朋友们&#xff0c;我是从http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html这里转载过来的&#xff0c;很不错就收藏了&#xff0c;如果转载&#xff0c;请注明初始链接。 .3 GCC Inline ASM GCC 支持在C/C代码中嵌入汇编代码&#xff0c;这些汇编代码被称作…

python标准库(二)

格式化输出 reprlib 库用来格式化 >>> import reprlib >>> reprlib.repr(set(aabbccddeeeff)) "{a, b, c, d, e, f}" >>>对集合能排序 >>> reprlib.repr(set(fdajfejaa)) "{a, d, e, f, j}" >>>pprint库用…

templates(0.1)

每一位 C 程序员都有自己的一套编程风格。这就引来了各种问题&#xff1a;哪儿应该 插入空白符号、怎么摆放分隔符&#xff08;大括号、小括号&#xff09;…等等。我们尽量保持全书风格一致&#xff0c; 当然有时候我们也对特殊问题作出让步。例如在教本&#xff08;初阶&…

实验4 进程运行轨迹的跟踪与统计

进程运行轨迹的跟踪与统计 难度系数&#xff1a;★★★☆☆ 实验目的 掌握Linux下的多进程编程技术&#xff1b;通过对进程运行轨迹的跟踪来形象化进程的概念&#xff1b;在进程运行轨迹跟踪的基础上进行相应的数据统计&#xff0c;从而能对进程调度算法进行实际的量化评价&…

虚拟环境创建,pip管理包

windows10虚拟环境的创建&#xff0c;pip管理包1.虚拟环境的创建1.1 为什么要创建虚拟环境1.2 创建虚拟环境1.3 激活虚拟环境1.3.1 激活方式1.3.2 检查是否创建成功2.用pip管理包2.1 pip的基本使用2.2 pip创建安装的文件requirements.txt2.3 安装包对应的版本2.4 用pip - r ins…

Linux C编程一些优秀的博客链接

1&#xff0c;C进程内存分布 https://www.cnblogs.com/fengyv/p/3789252.html 2&#xff0c;fork入门讲解 http://blog.csdn.net/jason314/article/details/5640969

vi文字处理器

http://blog.csdn.net/wangloveall/article/details/22649331 摘要&#xff1a;vi是类UNIX命令行接口的标准文字处理软件&#xff0c;也是进行shell脚本程序编写与服务器设置的非常重要的工具。本文介绍vi文字处理器&#xff0c;包括vi简介、vi怎么使用、vi的加强版vim。 关键词…

顺序栈,链栈

栈与链栈一&#xff0c;顺序栈1.1 IStack栈接口1.2&#xff0c;顺序栈增删改查的实现1.3&#xff0c;测试顺序栈二&#xff0c;链栈2.1&#xff0c;存放数据的结点2.2&#xff0c;链栈的实现2.3测试链栈一&#xff0c;顺序栈 1.1 IStack栈接口 public interface IStack {publ…