一、类的三种方法
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. 通过jQuery遍历div里面的checkbox

    遍历: $('#queryUser2 input[type="checkbox"]:checked').each( function () { a = a + $(this).va ...

  2. CSS的垂直居中和水平居中总结

    内联元素居中方案 水平居中设置: 行内元素 设置 text-align:center: Flex布局 设置display:flex;justify-content:center;(灵活运用) 垂直居中 ...

  3. 洛谷P1111修复公路并查集改

    看了他们的题解感觉很震惊,为什么要用kruskal,这题要用到最小生成树吗??? 38行短短的程序就可以了,我觉得学习不是一种套用,套自己学的,而且题解很大一部分都是kruskal. 个人认为自己的程 ...

  4. 七、Linux 文件与目录管理

    Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是绝对 ...

  5. Node.js 特点

      1.单线程 在Java.PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约2MB内存.也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数 ...

  6. python模块汇总练习

    模块练习 1.random模块 # print(random.random()) # print(random.randint(1,3)) #模拟随机验证码 def make_code(n=5): r ...

  7. 必须使用member initialization list来初始化的情况

    // member initialization #include <iostream> using namespace std; class Circle { double radius ...

  8. MAX(数论)

    Description 小C有n个区间,其中第i个区间为[li,ri],小C想从每个区间中各选出一个整数,使得所有选出的数and起来得到的结果最大,请你求出这个值. Input Format 第一行一 ...

  9. Eclipse主题更换方法

    1.打开Eclipse的Help->Eclipse Marketplace 2.在Find里搜索Eclipse Color Theme,点击Install按钮 3.打开Window->Pr ...

  10. Linear Regression 线性回归

    Motivation 问题描述 收集到某一地区的房子面积和房价的数据(x, y)42组,对于一套已知面积的房子预测其房价?   由房价数据可视化图可以看出,可以使用一条直线拟合房价.通过这种假设得 ...