一、创建类:

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

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

posted on 2020-03-29 16:46  勿忘-前行  阅读(2415)  评论(0编辑  收藏  举报