一、类的三种方法
1、实例方法
def func(self):
由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
只能通过实例调用
 
2、静态方法
@staticmethod
def add():
由类调用,不需要对象;无默认参数。静态方法跟所在的类没有任何关系,也不能引用类里面的属性和方法
静态方法既可以直接使用类名去调用,还可以使用类的实例去调。
 
3、类方法
不用创建实例,就可以使用的方法
@classmethod (装饰器)
def func1(cls): cls指向类
由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
eg:
#coding=utf-8
class Person(object):
id = 12 #类静态成员在这儿定义,注意缩进
def __init__( self,name ):
self.name = name
self.__inName = 'ads'
@classmethod #类方法定义,用注解方式说明
def up(cls,a ): #这儿是cls,不是self
print cls,cls.__name__
return a+1
#创建类的实例
p = Person( "alpha" )
#调用类方法
print Person.up(20) #类名直接调用
print p.up(12) #通过实例对象调用 (实例可以调用类方法)
 
4、私有方法
类中方法名前面有两个下划线,表示是Python中的私有方法,类似于java中的private,不能在类外部调用(如__setId()),在类内部调用语法: self.__private_methods。
eg:
#coding=utf-8
class Person(object):
id = 12 #类静态成员在这儿定义,注意缩进
def __init__(self,name):
self.name = name
self.__inName = 'ads'
def __setId(self,id): #隐藏方法
Person.id = id * 2
def getId(self):
self.__setId(18) #类内部调用隐藏方法
return Person.id
p = Person("prel")
print p.getId() 通过类中的方法使用类的私有方法功能
 
5、类的构造方法
class Foo(object):
def __inti__(self,*args): 使用了元祖参数,对于变量不确定的情况。构造方法
if len(args)==2:
self.name=name
self.age=age
else:
print 'no salary'
def bar(self):
pass
obj=Foo() 实例化的时候,会执行__init__()这个构造方法
 
二、前三种方法对比
1、相同点和不同点
相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。
不同点:方法调用者不同、调用方法时自动传入的参数不同。
 
三、前三种方法的总结
类方法可以被类对象或实例调用,实例方法只能被实例调用,它只属于类的单个实例拥有,静态方法两者都能调用,它在类和实例间共享。Python实现了一定的灵活性使得类方法和静态方法,都能够被实例和类二者调用。
所以三者主要区别在于参数传递上的区别,实例方法隐含传的参数是类实例self,而类方法隐含传递的参数是类本身cls,而静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。

Python之面向对象:方法的更多相关文章

  1. Python之面向对象方法

    Python之面向对象方法 property的用法: property属于类的封装的范畴 property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值. 用property的方法,就可 ...

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

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

  3. python类及其方法

    python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...

  4. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  5. Python的面向对象2

    我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...

  6. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  7. Python进阶---面向对象的程序设计思想

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

  8. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

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

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

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

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

随机推荐

  1. C# WinForm 绘制圆角窗体

    public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; FormPath = new Syste ...

  2. python 实现剪刀石头布(三局两胜)

    # -*- coding:utf-8 -*- import random # best of three def finger_guess(): rule = {1:'rock', 2:'paper' ...

  3. ubuntu18.04 and Linux mint 19安装virtualbox

    1.1  安装Virtualbox root@amarsoft-ZHAOYANG-K43c-:~# apt-get install virtualbox -y 1.2  显示Virtualbox桌面图 ...

  4. C++学习网站——www.cplusplus.com

    http://www.cplusplus.com/ 有各个函数.语法的实例代码,可以在线运行http://cpp.sh/不支持中文字符,不错.

  5. n个人排队都不站在原来的位置

    一.题目描述 有n个人首先站成一排,请问,当n个人第二次再重新排列,每个人都不在原来的位置上,问有多少种站法.例如,原来有3个人,ABC,那么第二次每个人都不在原来的位置上有2种站法,BCA和CAB, ...

  6. Hive UDAF开发详解

    说明 这篇文章是来自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比较 ...

  7. firewall-cmd 防火墙命令详解 及 TCP Wrappers

    firewall-cmd 常用参数及作用 参数 作用 --get-default-zone 查询默认的区域名称 --set-default-zone=<区域名称> 设置默认的区域,使其永久 ...

  8. Java-数据结构之栈练习

    栈(stack)可以看做是特殊类型的线性表,访问.插入和删除其中的元素只能在栈尾(栈顶)进行. 队列(queue)表示一个等待的线性表,它也可以看做是一种特殊类型的线性表,元素只能从队列的末端(队列尾 ...

  9. 1、HTML基础总结 part-1

    1.基本标签属性 <html> <!--属性和属性值对大小写不敏感. 不过,万维网联盟在其 HTML 4 推荐标准中推荐小写的属性/属性值. 而新版本的 (X)HTML 要求使用小写 ...

  10. 2017腾讯Web前端实习生招聘笔试题总结

    指针与引用的区别 考察margin塌陷 考察C++继承和~符号 考察TCP通讯过程 位码 三次握手 为什么不是两次握手 为什么不是四次握手 四次挥手 为什么要四次握手 TCP的状态 考察严格模式 进程 ...