• Python 类>>>类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)


    一、创建类:

     类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。类不存在于内存中,因此它本身并不是对象。当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例,即对象。虽然只有一个类,但能以这个类在内存中创建多个相同类型的对象

    class Person(object):
    
        #类的方法中必须要有一个self参数,但是方法被调用时,不用传递这个参数
        def get_name(self):      
            print "my name is: james"
    
        def get_age(self):
            print "my age is : 3、5"
    
        def get_hoppy(self):
            print "My hoppy is :lvyou"
    boy = Person()
    boy.get_name()       #但是方法被调用时,不用传递这个参数
    boy.get_age()        #在调用get_age等方法时,boy自动将自己作为一个参数传入方法中,因此我们称它为self
    boy.get_hoppy()

    二、类的封装与多态

    封装:即将抽象得到的数据和行为(功能)相结合,形成一个有机整体,也就是将数据和操作数据的源代码进行有机整合,形成类。

    其中数据和函数都是类的成员。目的是隐藏对象的属性和实现细节,对外公开接口,在程序中控制属性的读和修改的访问级别。

    封装和多态的区别:多态可以让用户对不知道是什么类的对象进行方法调用,而封装则不用关心对象是如何创建的而直接进行使用

    class MyClass(object):
    
        # 定义一个全局变量
        name = 'html'
    
        def set_name(self, name):
            self.name = name
    
        def get_name(self):
            return self.name
    
    my = MyClass()
    my.set_name('kryle')
    print my.get_name()
    
    # 如果将变量存储到全局变量name中时,实例化MyClass之后,全局变量name将会改变
    my = MyClass()
    my.name = 'Tom'
    print my.get_name()
    
    # 对象有自己的状态,对象的状态由它的特性名称来描述,eg:下面she对象的内容不影响my对象的内容
    she = MyClass()
    she.set_name('angel')
    print she.get_name()
    print my.get_name()

    三、类方法、属性分类与定义:

    python类方法和属性分类:

    类中方法:公有方法、私有方法、类方法、静态方法

    类中属性:私有属性、公有属性、实例属性、局部变量

    类中变量变量分为公有变量和私有变量

    【python类包含方法】

    公有方法:在类中和类外都能调用的方法

    私有方法:不能被类外部调用,在方法前面加上“__“双下划线就是私有方法

    类方法:被classmethod()函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系)

    静态方法:相当于“全局函数”,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义, 静态方法没有“self”参数。

    内置函数:__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__() 代表类的构造函数。

    三种方法的主要区别在于参数,实例方法被绑定到一个实例,只能通过实例进行调用;但是对于静态方法和类方法,可以通过类名和实例两种方式进行调用

    self参数 说明:
    用于区分函数和类的方法(必须有一个self),self参数表示执行对象本身

    【python类包含属性】

    • 私有属性

      函数、方法或者属性的名称以两个下划线开始,则为私有类型;

    • 公有属性

      如果函数、方法或者属性的名称没有以两个下划线开始,则为公有属性;

    • 实例属性

      以self作为前缀的属性;

    • 局部变量

      类的方法中定义的变量没有使用self作为前缀声明,则该变量为局部变量;

    详细说明:

    xxx 公有变量

    _xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入

    __xxx 类中的私有变量(Python的函数也是对象,所以成员方法称为成员变量也行得通。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据,但可以通过私有属性,可以通过instance._classname_attribute方式访问

    tip:python中有点伪私有属性的意思

    四、区别

    classmethod 是类方法,而 staticmethod 是静态方法。

    在 Python中,静态方法和类方法都是可以通过类对象和类对象实例访问。但是区别是:
    @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,类方法的第一个参数 cls,而实例方法的第一个参数是 self,表示该类的一个实例。

    普通对象方法至少需要一个 self 参数,代表类对象实例,类方法有类变量 cls 传入,从而可以用 cls 做一些相关的处理。并且有子类继承时,调用该类方法时,传入的类变量 cls 是子类,而非父类。

    对于类方法,可以通过类来调用,比如说 A 是一个类,那么我们可以通过 A.method() 来调用 A 里面的 method 方法, 也可以通过类的一个实例来调用,如 A().method() 进行调用,首先 A() 方法会调用 A 的初始化方法进行实例化出一个 A 的对象,然后通过该对象调用 method 方法。

    五、

    六、实例

    类方法区分:

    # -*-coding:utf-8-*-

    class People(object):
    color = "yellow" #全局公有变量
    default_name = 'anyone'
    __age = 30 # 私有属性

    #python中内中构造函数
    def __init__(self):
    self.name ='someone'
    #python中S实例函数
    def think(self):
    self.color = "black"
    print("I am a %s" % self.color)
    print(self.__age)

    def __talk(self):
    print("I am talking with Tom")

    # def test(self):
    # print self.color
    @classmethod # 装饰器,只对下面的一个函数起作用
    def class_method(cls, message): # 类方法
    print("执行类方法 class_method(%s,%s)" % (cls, message))
    # print People.color #访问类里面其它成员

    @staticmethod # 装饰器,只对下面的一个函数起作用
    def static_method(): # 类静态方法
    print("我是被定义的静态方法")


    ren = People()
    print(ren)
    print(ren.color)
    ren.think()
    print(ren._People__age)
    # 私有属性调用方法,建议:仅程序测试使用
    
    
     

    部分引用来自:https://blog.csdn.net/wohu1104/article/details/89424370(比较不错)

  • 相关阅读:
    javac编译java文件报错:“3: 错误: 编码 GBK 的不可映射字符 (0xB2)”
    java HelloWorld时报错:"找不到或无法加载主类"问题的解决办法
    MySQL下载、安装、配置(5.7.19版本)
    console报错:"-Djava.endorsed.dirs=D:apache-tomcat-9.0.7endorsed is not supported. Endorsed standards and standalone APIs in modular form will be supported via the concept of upgradeable modul"的原因及解决办法
    uDig配图与GeoServer添加Style
    ArcGIS统计栅格像元值并转换为矢量图层
    博客项目
    python(openpyxl)复制excel数据到另一个excel数据表
    python openpyxl自动化操作excel(xlsx)
    python自动化之 excel转word
  • 原文地址:https://www.cnblogs.com/clarenceyang/p/12593291.html
Copyright © 2020-2023  润新知