ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-03-29 16:51:32  阅读:140  来源: 互联网

标签:静态方法 name self 实例 print 方法 属性


一、创建类:

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

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(比较不错)

标签:静态方法,name,self,实例,print,方法,属性
来源: https://www.cnblogs.com/clarenceyang/p/12593291.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有