【引用】python 静态函数 类函数 实例函数

1.关于定义类的一些奇特之处
  今天在Python中定义一个类,很奇怪,不需要事先声明它的成员变量吗?暂时不知,先记录下来:

class Account(object):
    "一个简单的类"
    account_type="Basic"
    def __init__(self,name,balance):
        "初始化一个新的Account实例"
        self.name=name
        self.balance=balance
    def deposit(self,amt):
        "存款"
        self.balance=self.balance+amt
    def withdraw(self,amt):
        "取款"
        self.balance=self.balance-amt
    def inquiry(self):
        "返回当前余额"
        return self.balance

其中,__init__函数就是Python中的构造函数吧?另外,balance这个变量没有在类中定义,却直接拿来使用,虽然说脚本语言可以预先不定义变量,但是在类中,定义一下是不是可以使类更清晰呢?

另外,在python中类中定义成员函数一般第一个参数总是self,表示自已的实例,与C++中的this指针差不多,不过C++中的this指针是隐函于其中并全局可见的,而在Python中却要作为参数传进去, 这是Python中定义类的另一个特点。

还有一个特点,在类的成员函数中,使用类中的另一个成员函数,前面必须要指定类名,如下:

 class Foo(object):
     def bar(self):
         print "bar!"
     def spam(self):
         bar(self)     # 错误,引发NameError
         Foo.bar(self) # 合法的

2.在类中声明静态方法并使用静态方法

要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法:另外,多个实例共享此静态方法,如下:

class SimClass():
   @staticmethod
   def ShareStr():
      print "This is a static Method"


SimClass.ShareStr()   #使用静态函数

3.类方法:

类方法与普通的成员函数和静态函数有不同之处,在接触的语言中好像也没见过这种语义,看它的定义:

一个类方法就可以通过类或它的实例来调用的方法, 不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。 
    记住:方法的第一个参数都是类对象而不是实例对象. 
    按照惯例,类方法的第一个形参被命名为 cls. 任何时候定义类方法都不是必须的(类方法能实现的功能都可以通过定义一个普通函数来实现,只要这个函数接受一个类对象做为参数就可以了). 
    定义类方法并使用类方法:

class ABase(object):
    @classmethod        #类方法修饰符
    def aclassmet(cls): print ‘a class method for‘, cls.__name__
class ADeriv(ABase): pass
bInstance = ABase(  )
dInstance = ADeriv(  )
ABase.aclassmet(  )               # prints: a class method for ABase
bInstance.aclassmet(  )           # prints: a class method for ABase
ADeriv.aclassmet(  )              # prints: a class method for ADeriv
dInstance.aclassmet(  )           # prints: a class method for ADeriv

也就是说,类方法并不是必须的,使用普通函数也可以实现类方法的功能。

4.类的继承

在python中,继承一个类,就像这样:
    class A(object)  #继承object类
            #.......
    class B(A)         #继承A类
            #........

另外,python中支持多继承,对于多继承,找某个对应的函数,其python有相应的方法,如:

 class D(oject): pass                    #D继承自object
    class B(D):                             #B是D的子类
        varB = 42
        def method1(self):
            print "Class B : method1"
    class C(D):                             #C也是D的子类
        varC = 37
        def method1(self):
            print "Class C : method1"
       def method2(self):
           print "Class C : method2"
   class A(B,C):                           #A是B和C的子类
       varA = 3.3
       def method3(self):
          print "Class A : method3"

如果我要调用A.method1() ,会出现什么结果?答案是ClassB:method1. 书上是只样介绍的:
当搜索在基 类中定义的某个属性时,Python采用深度优先的原则、按照子类定义中的基类顺序进行搜索。**注意**(new-style类已经改变了这种行为)。 上边例子中,如果访问 A.varB ,就会按照A-B-D-C-D这个顺序进行搜索,只要找到就停止搜索.若有多个基类定义同一属性的情况,则只使用第 一个被找到属性值:

5.数据隐藏

在python中实现数据隐藏很简单,不需要在前面加什么关键字,只要把类变量名或成员函数前面加两个下划线即可实现数据隐藏的功能,这样,对于类 的实例来说,其变量名和成员函数是不能使用的,对于其类的继承类来说,也是隐藏的,这样,其继承类可以定义其一模一样的变量名或成员函数名,而不会引起命 名冲突(也就是: "双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据)。

 class A:
       def __init__(self):
          self.__X = 3        # self._A__X
    
    class B(A):
       def __init__(self):
          A.__init__(self)
          self.__X = 37       # self._B__X

【引用】python 静态函数 类函数 实例函数,布布扣,bubuko.com

时间: 2024-10-24 13:59:28

【引用】python 静态函数 类函数 实例函数的相关文章

python 类函数,实例函数,静态函数

一.实现方法 class Function(object): # 在类定义中定义变量 cls_variable = "class varibale" def __init__(self): # 在构造函数中创建变量 self.__instance_variable = "instance variable" def instance_method(self): print(self.cls_variable) print(self.__instance_variab

【python】15、函数

一.函数 3.对于Python的函数,我们需要记住的是 1)函数的默认返回值是None. 2)python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前面定义的. 3)程序执行的时候,遇到函数定义只会先将函数整体读进内存,并不立刻执行.等到函数被调用的时候才执行函数体. 4)python函数的参数传递的是值传递还是引用传递. 函数参数传递本质上和变量整体复制一样,只是两个变量分别为形参a和实参b.那么,a=b后,a变了,b值是否跟着变呢?这

Python 基础语法六 ——函数

一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号(:),然后在缩进块中编写函数体,函数的返回值用return 语句返回. def area_of_square(x): s = x*x return s 1 def area_of_square(x): 2 s = x*x 3 return s 2.全局变量 定义:在函数外面定义的变量称为全局变量.

python学习笔记(二) - 函数

一. 调用函数 python内置了一些数据类型转换函数,比如int()函数可以把其他数据类型转换为整形 >>> int('123') 123 >>> int(12.34) 12 >>> float('12.34') 12.34 >>> str(1.23) '1.23' >>> unicode(100) u'100' >>> bool(1) True >>> bool('') Fal

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

2015/9/17 Python基础(13):函数

函数是对程序逻辑进行结构化或过程化的一种编程方法. Python的函数返回值当什么也不返回时,返回了None和大多数语言一样,Python返回一个值或对象.只是在返回容器对象时,看起来像返回多个对象.这样在操作的时候显得很灵活,虽然它本质上只是反悔了一个对象. 调用函数我们用一对圆括号电泳函数.任何输入的参数都应该放在括号中. 关键字参数这个概念是针对函数调用的,比如我们有这样的函数 def fun(value, count): fun_suite 我们可以标准调用: fun(12,20) 也可

python可变参数调用函数问题

一直使用python实现一些想法,最近在使用python的过程中出现这样一个需求,定义了一个函数,第一个是普通参数,第二个是默认参数,后面还有可变参数,在最初学习python的时候,都知道非关键字可变参数和关键字可变参数两种,调用的方式也非常多种多样,这里主要提出一个比较隐含的问题,并将各种可能出现的情况进行了探讨. 函数声明格式 python虽然不支持函数重载,但是通过对函数参数的众多特性的支持基本弥补了.函数声明的通式如下: def func(argv1,argv2...[,argv_d =

python 类和实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同. 仍以Student类为例,在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,

Python操作Mysql实例代码教程在线版(查询手册)_python

实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con = None try:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('