类的属性、类的方法、类的内置方法

简介:

类的属性

变量在类中称为类的属性,函数在类中称为类的方法,类的属性分为以下几种:

(1) 公有属性:在类中和类外都能调用的属性,定义的时候与变量的定义一致,如 color = 'yellow'
(2) 私有属性:不能在类外及被类以外的函数调用,定义的时候以双下划线开头,如__color = 'yellow'

(3) 内置属性: 由系统在定义类的时候默认添加的,定义的时候以前后双下划线构成,如 dict

#!/usr/bin/env python
class People(object):
    color = 'yellow'         # 定义类的公有属性

    __age = 30               # 定义类的私有属性

    def think(self):
        print self.__age     # 只能在类里面调用私有属性

ren = People()
print ren.color              # 可以在类外面调用公有属性
ren.think()
print ren.__dict__           # 系统已经定义好了内置属性,可以直接调用

类的方法

变量在类中称为类的属性,函数在类中称为类的方法,类的方法分为以下几种:

(1) 公有方法:在类中和类外都能调用的方法
(2) 私有方法:只能在类里面被调用,不能被类的外部调用,定义的时候要在前面加上双下划线,如 def __think()

备注:定义方法的时候后面都有一个self,如:def think(self);就是区别类方法和函数(不需要self),里面有self是作为函数的第一个参数

(3) 类方法:能被类直接调用的方法称为类方法,但要通过 classmethod() 函数处理后才能被类直接调用
(4) 静态方法:静态方法相当于全局函数,可以被类直接调用,但要通过 staticmethod() 处理后才能被直接调用,注意静态方法没有 self 参数br/>区别:@classmethod与@staticmethod
<="" a="" style="margin: 0px; padding: 0px; max-width: 100%;"> 前者是类方法,后者是静态方法,共同点是都可以使用类的名字来调用这个方法。
不同点是两种方法的定义不同,前者必须有个self参数,后者可以没有参数,类方法也叫做动态方法,在调用类方法的时候,其他方法不会被加载到内存,调用静态方法是,其他方法也会一起被加载到内存。
self就表示类的本身。
类方法里必须使用self作为参数,这样才能被类识别为是自己的一个方法。
没有self就是一个函数,这时类是不能调用它的,除非使用@staticmethod这个装饰器,类才能调用它。

实例:

#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30
    def __talk(self):         # 定义私有方法,需要在前面添加双下划线
        print "I am talking with Tom"
    def test(self):           # 定义公有方法,方法的定义和函数一样,但是需要 self 作为第一个参数,表示执行对象本身
        self.__talk()         # 在类的内部调用私有方法

jack = People()
jack.test()
#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30

    def test(self):               # 定义公有方法
        print "Testing......"

    cm = classmethod(test)        # 通过 classmethod 函数转换成类方法

jack = People()
People.cm()                       # 公有方法是不可以通过类直接调用的,只能通过对象来调用,但转换成类方法之后,就可以通过类直接调用
#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30

    def test():                   # 在类中定义方法如果没有加 self 参数只能称其为函数
        print "Testing......"

    sm = staticmethod(test)       # 通过 staticmethod 函数转换成静态方法

jack = People()
People.sm()                       # 静态方法可以通过类直接调用

可以参考以下代码:

class People(object):
    color='yellow'              #类的属性
    __age=30                    #私有属性
    def A(self):                #公有方法
        self.color='black'
        print 'I am a %s' %self.color
    def test(self):
        self.A()                #类里面调用
        print self.__age        #调用私有属性

    def __think(self):
        print 'this is private mathod'

    def call(self):             #调用私有方法
        self.__think()

    @classmethod                #只对下面的一个函数起作用
    def classMethod(self):
        print 'This is classMethod'

         @classmethod
    def call_class(self):       #动态函数调用类的属性
        print self.color

    def B(self):                #通过动态方法对这个方法B不起作用,只能用实例化的类调用
        print 'B'

    @staticmethod               #只对下面的一个函数起作用
    def staticMetod():
        print 'This is staticMethod'

pe=People()
pe.A()
pe.test()
pe.call()
People.classMethod()
People. call_class()
People.staticMetod()
pe.B()
结果:
I am a black
I am a black
30
this is private mathod
This is classMethod
yellow
This is staticMethod
B

类的内置方法

所谓内部类,就是在类的内部定义的类,主要的目的是为了更好的抽象现实世界

class People(object):
    color='yellow'

    class Chinese(object):
        print 'I am a chinese'
        name='test'

#第一种方法:
pe=People()
jack=pe.Chinese()
print jack.name

#第二种方法调用属性name1:
print People.Chinese.name
结果:
I am a chinese
test
test

实例:

class People(object):
    color='yellow'

    def __str__(self):              #通过这个函数可以知道pe是做什么的,只能用return,不能用print
        return 'pe is People class'

    def __init__(self):             #将类的属性更改,调用的结果就是green,但是使用类调用属性则不变
        self.color='green'
        print 'this is init'        #初始化方法可以不用调用,最开始的时候直接就执行了

    class Chinese(object):
        print 'I am a chinese'
        name='test'

pe=People()
print pe
print pe.color
print People.color

结果:

I am a chinese
this is init
pe is People class
green
yellow

实例2:可以设置初始化的默认参数
类的属性、类的方法、类的内置方法

结果:
类的属性、类的方法、类的内置方法

初始化函数时可以调用方法:
类的属性、类的方法、类的内置方法

del 用于释放对象所占用的资源,注意 del 是在脚本要退出之前执行的
class People(object):
color = 'yellow'

def __init__(self):
    self.fd = open('/etc/passwd')    # 我打开了一个文件

def __del__(self):
    self.fd.close()                  # 可以在__del__中关掉这个文件

ren = People()










本文转自 iekegz 51CTO博客,原文链接:http://blog.51cto.com/jacksoner/2059624,如需转载请自行联系原作者
目录
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
663 219
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
349 34
Meta SAM3开源:让图像分割,听懂你的话
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1562 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
897 61
|
7天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
295 140