zoukankan      html  css  js  c++  java
  • Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

    属性分为实例属性与类属性

    方法分为普通方法,类方法,静态方法

    一:属性:

      尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍,不同的实例的实例属性可能不同,不同实例的类属性都相同。从而减少内存。

      1:实例属性:

        最好在__init__(self,...)中初始化

        内部调用时都需要加上self.

        外部调用时用instancename.propertyname

      2:类属性:

        在__init__()外初始化

        在内部用classname.类属性名调用

        外部既可以用classname.类属性名又可以用instancename.类属性名来调用

      3:私有属性:

        1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改

        2):双下划线__开头:外部不可通过instancename.propertyname来访问或者更改

          实际将其转化为了_classname__propertyname

    二:方法

      1:普通类方法:

        def fun_name(self,...):

          pass

        外部用实例调用

      2:静态方法:@staticmethod            

          不能访问实例属性!!!   参数不能传入self!!!

          与类相关但是不依赖类与实例的方法!!

      3:类方法:@classmethod

          不能访问实例属性!!!   参数必须传入cls!!!

          必须传入cls参数(即代表了此类对象-----区别------self代表实例对象),并且用此来调用类属性:cls.类属性名

      *静态方法与类方法都可以通过类或者实例来调用。其两个的特点都是不能够调用实例属性

      

      e.g1:

    1. class A:  
    2.     member = "this is a test."  
    3.     def __init__(self):  
    4.         pass  
    5.  
    6.     @classmethod  
    7.     def Print1(cls):  
    8.         print "print 1: ", cls.member  
    9.           
    10.     def Print2(self):  
    11.         print "print 2: ", self.member  
    12.             
    13.          
    14.     @classmethod      
    15.     def Print3(paraTest):  
    16.         print "print 3: ", paraTest.member  
    17.     @staticmethod  
    18.     def print4():  
    19.         print "hello"  

    总结:类属性与类方法是类固有的方法与属性,不会因为实例不同而改变,写他们的目的是减少多实例时所创造出来的内存空间,加快运行速度。

       

  • 相关阅读:
    Oracle11g聚合函数
    和为S的连续正数数列,动态规划,C++
    统计一个数组在排序数组中出现的次数,C++,二分查找
    寻找两个链表的第一个公共子节点,C++
    二维数组中的查找
    数组中的逆序对,C++,分治算法
    得到从小到大的第N个丑数的三种方式(C++)一维动态规划
    连续字数组的最大和(Java)一个int数组,求其中的最大的连续数的和
    n个整数,求这中间最小的k个整数(Java)
    两个字符串的最长公共子串求法(C++、动态规划)
  • 原文地址:https://www.cnblogs.com/pengsixiong/p/4823473.html
Copyright © 2011-2022 走看看