python 类的几种方法(函数)

python中可以定义类,为面向对象语言。

在定义个class时,可以定义3中类型的方法。包括‘实例方法’、“类方法”,“静态方法”其中不同之处:

python类的方法
类型 类访问 实例访问 意义
实例方法 不可以 可以  
类方法 可以 可以  
静态方法 可以 可以  

1,实例方法

  实例方法是最简单的一种方法,定义一个实例方法第一个默认的隐式传参标示调用当前方法的实例:

#encoding:utf-8
#小五
class Person(object):
    def __init__(self,name):
        self.name = name
    def syaHello(self):
        return self.name+‘! hello!‘
    def __str__(self):
        return ‘Person name(%s)‘%self.name
p1 = Person(‘Bob‘)
print p1.syaHello() #可以输出Bob! hello!
print Person.syaHello() #报错:unbound method syaHello() must be called with Person instance as first argument (got nothing instead)

sayHello方法是实例的方法,所以类调用不到。

2,类方法

   用@classmethod 装饰的方法是类方法,用类和实例都能访问到,传入的参数第一个是类,不是实例。所以访问不到实例的属性。



#encoding:utf-8
#小五
class Person(object):
    gender=‘女‘
    def __init__(self,name):
        self.name = name
    @classmethod
    def sayD(self):
        print self.gender #可以正常输出‘女’
        return self.name #报错:AttributeError: type object ‘Person‘ has no attribute ‘name‘
    def sayHello(self):
        return self.name+‘! hello!‘
    def __str__(self):
        return ‘Person name(%s)‘%self.name
p1 = Person(‘Bob‘)
print p1.sayD()

 

3,静态方法

用@staticmethod装饰的方法称为静态方法,和前2种的主要区别是第一个参数不是默认,需要调用者传入。和java中的方法一样,可以用作工具方法。

#encoding:utf-8
#小五
class Person(object):
    gender=‘女‘
    def __init__(self,name):
        self.name = name
    @staticmethod
    def sayD(self):
        return self
    def sayHello(self):
        return self.name+‘! hello!‘
    def __str__(self):
        return ‘Person name(%s)‘%self.name
p1 = Person(‘Bob‘)
print p1.sayD(‘sssss‘) #可以输出sssss
print Person.sayD(‘aa‘)  #可以输出aa
时间: 2024-10-13 20:27:22

python 类的几种方法(函数)的相关文章

python类的三种方法

一.先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. ps.python中self,cls的区别 普通实例方法,第一个参数需要是self,它表示一个具体的实例本身.如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用.而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身. # coding:utf-8 class Foo(object): """类三种方法语法形式"&

Javascript使用function创建类的两种方法

1.使用function类 //myFunction.js var CMyFunc=function() { //类的公共方法,供外部调用 this.Func1=function() { var i=0; return i; } this.Func2=function() { _privateFunc(); } //类中的私有方法,供公共方法调用 function _privateFunc() { return 0; ] } CMyFunc myFunc=new CMyFunc(); 使用:其它

Python文件遍历二种方法

分享下有关Python文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现. 关于Python的文件遍历,大概有两种方法,一种是较为便利的os.walk(),还有一种是利用os.listdir()递归遍历.方法一:利用os.walkos.walk可以自顶向下或者自底向上遍历整个文件树,然后返回一个含有3个元素的tuple,(dirpath, dirnames, filenames).注意,os.walk()会返回一个generater,所以调用的时候一定要放到for循环中

AVA实例化类的四种方法

原文地址:JAVA实例化类的四种方法 作者:权镜士 JAVA中实例化类的四种方法 1)使用new操作符 2)调用Class对象的newInstance()方法 3)调用clone()方法,对现有实例的拷贝 4)通过ObjectInputStream的readObject()方法反序列化类 点击(此处)折叠或打开 import java.io.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTa

反射获取类的几种方法

1 public class Demo { 2 3 /** 4 * 反射:加载类,获得类的字节码 5 * @param args 6 * @throws ClassNotFoundException 7 */ 8 public static void main(String[] args) throws ClassNotFoundException { 9 10 //1 11 Class clazz = Class.forName("Person"); 12 13 //2 14 Cla

python爬虫:两种方法模拟登录博客园

第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以发现两个输入框的id分别为input1.input2,复选框的id为remember_me,登录按钮的id为signin. 还有一段JavaScript代码,下面来简单分析一下. 先来看$(function(){});函数: 1 $(function () { 2 $('#signin').bind

Javascript定义类的三种方法分析

一.构造函数法 function User() { this.name = "张三"; } 生成实例的时候,使用new关键字. var user1 = new User(); alert(user1.name); // 张三 类的属性和方法,还可以定义在构造函数的prototype对象之上. User.prototype.sing = function(){ alert("only you!"); } 缺点:比较复杂,用到了this和prototype,不易编写和阅

python—类的属性和方法总结

一.类的属性总结(类的属性定义在方法外,对象的属性定义在方法内) 理解: 类的(静态)属性:(人类的五官,理解为变量) 类的(动态)方法:(人类吃穿住行,理解为一个函数,至少带一个参数self,指向类本身) 对象:类的实例化,之后才能有属性和方法 1)类的属性,也是公有属性:类的私有属性 2)对象的公有属性:对象的私有属性 3)函数局部变量:全局变量 4)内置属性 #!/usr/bin/env python #encoding:utf-8 var6 = "全局变量var6" class

Python类的继承和方法重写总结

我们都知道类可以继承,通过继承可以实现代码的复用,使代码看起来更加简洁 比如: Class B(A): Pass 定义了一个名为B的类,它继承于A,我们把B叫做A的子类,A叫做B的超类(父类). 方法重写 当子类定义了一个和超类相同名字的方法时,那么子类的这个方法将覆盖超类相同的方法(或称为重写) 先借用两个例子: >>> class Bird: ...     def __init__(self): ...         self.hungry = True ...     def