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

简介:

类的属性

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

(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
前者是类方法,后者是静态方法,共同点是都可以使用类的名字来调用这个方法。
不同点是两种方法的定义不同,前者必须有个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,如需转载请自行联系原作者
目录
相关文章
|
1月前
深入类的方法
深入类的方法
8 0
|
1月前
|
存储 C++
C++对象和类
C++对象和类
15 0
|
1月前
|
存储 C#
C#对象和类
C#对象和类
15 0
|
4月前
|
存储 算法 Java
第 4 章 对象与类(上)
第 4 章 对象与类
63 0
|
4月前
|
存储 Java 编译器
第 4 章 对象与类(下)
第 4 章 对象与类
107 0
|
7月前
2.【类的组合(在一个类中定义一个类)】
2.【类的组合(在一个类中定义一个类)】
16 0
|
11月前
|
编译器 C语言 C++
C++ 类 & 对象
【摘要】 C++ 类 & 对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++ 类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是...
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
|
Python
Python面向对象、类的抽象、类的定义、类名遵循大驼峰的命名规范创建对象、类外部添加和获取对象属性、类内部操作属性魔法方法__init__()__str__()__del__()__repr__()
面向对象和面向过程,是两种编程思想. 编程思想是指对待同一个问题,解决问题的套路方式.面向过程: 注重的过程,实现的细节.亲力亲为.面向对象: 关注的是结果, 偷懒.类和对象,是面向对象中非常重要的两个概念object 是所有的类基类,即最初始的类class 类名(object): 类中的代码PEP8代码规范:类定义的前后,需要两个空行 创建的对象地址值都不一样如dog和dog1的地址就不一样,dog的地址为2378043254528dog1的地址为2378044849840 8.类内部操作属性 sel
169 1
Python面向对象、类的抽象、类的定义、类名遵循大驼峰的命名规范创建对象、类外部添加和获取对象属性、类内部操作属性魔法方法__init__()__str__()__del__()__repr__()