前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中类的属性、方法及内置方法

Python中类的属性、方法及内置方法

作者头像
py3study
发布2020-01-09 16:15:08
3.3K0
发布2020-01-09 16:15:08
举报
文章被收录于专栏:python3

1.类的属性

代码语言:javascript
复制
成员变量

对象的创建

代码语言:javascript
复制
创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法,
句柄用于区分不同的对象,
对象的属性和方法,与类中的成员变量和成员函数对应,
obj = MyClass()创建类的一个实例,扩号对象,通过对象来调用方法和属性

类的属性

代码语言:javascript
复制
类的属性按使用范围分为公有属性和私有属性类的属性范围,取决于属性的名称,
**共有属性**---在内中和内外都能够调用的属性
**私有属性**---不能在内外贝类以外函数调用
定义方式:以"__"双下划线开始的成员变量就是私有属性
可以通过instance.__classname__attribute方式访问,
内置属性--由系统在定义类的时候默认添加的由前后双下划线构成,如__dic__,__module__
代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

ren = People()
ren.color = '白色人'
print ren.color
ren.think()
print '#'*30
print("People.color")
print ren.__People__age  ##测试时使用。如要调用 时,通过方法内调用 。

2.类的方法

代码语言:javascript
复制
成员函数

类的方法
方法的定义和函数一样,但是需要self作为第一个参数.
类方法为:
    公有方法
    私有方法
    类方法
    静态方法

公有方法:在类中和类外都都测调用的方法.
私有方法:不测被类的外部调用模块,在方法前加个“__”c双下划线就是私有方法。
self参数:
    用于区分函数和类的方法(必须有一个self)
    self参数表示执行对象本身

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

   def test(self):

self.think() # 内部调用
jack = People()
jack.test()    #外部调用

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

 def test(self):
self.__talk() # 内部调用talk()

jack = People()
jack.test()    #外部调用

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

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

装饰器:
    @classmethod()
    @staticmethod()
代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

 def test(self):
print 'Testing....'

  cm = classmethod(test)

jack = People()
People.cm()
代码语言:javascript
复制
通过类方法类内的方法 ,不涉及的属性和方法 不会被加载,节省内存,快。

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
     __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

 def test():   ##没有self   静态调用     会把所有的属性加载到内存里。
print People.__age   #  通过类访问内部变量

  sm = staticmethod(test)

jack = People()
People.sm()

装饰调用类的方法:

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

jack = People()
People.test()
People.test1()

3.类的内置方法

Python内部类:

代码语言:javascript
复制
所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界。
例子:
汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类,
更好的描述汽车类,因为底盘轮胎是汽车的一部分。

内部类实例化方法:

代码语言:javascript
复制
方法1:直接使用外部类调用内部类
方法2:先对外部类进行实例化,然后再实例化内部类
out_name = outclass_name()
in_name = out_name.inclass_name()
in_name.method()

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        print("I am chinese")

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

jack = People.Chinese()
代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

jack = People.Chinese()  #外部类调用内部类
print jack.name     #外部类调用内部类对象
代码语言:javascript
复制
另一种方法,外部类调用内部类对象
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

ren = People()            #实例化外部类
jack = ren.Chinese()   #实例化内部类
print jack.name           #打印内部类属性

或
print People.Chinese.name
print People.Chinese().name

魔术方法:

str(self) 构造函数与析构函数 构造函数:

代码语言:javascript
复制
    用于初始化类的内部状态,Python提供的构造函数是__init__():
    __init__():方法是可选的,如果不提供,python会给出一个默认的__init__方法。

析构函数:

代码语言:javascript
复制
    用于释放对象占用的资源,python提供的析构函数是__del__():
    __del__():也是可选的,如果不提供,则python会在后台提供默认析构函数。

构造函数__str__

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def __str__(self):
        return "This is People class"

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

ren = People()            #实例化外部类
print ren     #默认执行__str__

__init__(self)初始化类:

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def __str__(self):
        return "This is People class"

    def __init__(self,c='white'):   #类实例化时自动执行
        self.color = c
 self.think()

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

jack = People('green')
ren = People()            #实例化外部类
print ren.color        #通过对象访问属性是初始化后的值
print People.color    #通过类访问还是原来的值   

[root@localhost 20180110]# python test1.py 
I am a black 
I am a thinker
30
black
yellow

析构函数__del__():释放资源

代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def __str__(self):
        return "This is People class"

    def __init__(self,c='white'):   #类实例化时自动执行
        print ("initing...")
 self.color = c
        self.think()
        f = open('test.py')

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

     def __del__(self):
          print ("del....")
   self.f.close()

jack = People('green')
ren = People()            #实例化外部类
print ren.color        #通过对象访问属性是初始化后的值
print People.color    #通过类访问还是原来的值   

垃圾回收机制:

代码语言:javascript
复制
Python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不再使用的对象。
Python采用“引用计数”的算法方式来处理回收,即:当然某个对象在其作用域内不再被其
他对象引用的时候,python就自动化清除对象。
gc模块collect()可以一次性收集所有待处理的对象(gc.collect)
代码语言:javascript
复制
#!/usr/bin/env python
#-*- coding:utf-8  -*-
class People(object):
    color = 'yellow'
    __age = 30   #私有属性

    class Chinese(object):
        name ="I am a Chinese."

    def __str__(self):
        return "This is People class"

    def __init__(self,c='white'):   #类实例化时自动执行
        print ("initing...")
                 self.color = c
        self.think()
        f = open('test.py')

    def think(self):
        self.color = "black"
        print "I am a %s "  % self.color
        print ("I am a thinker")
        print self.__age

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

    @classmethod #调用类的方法 
    def test(self):
        print ("this is class method")

    @staticmethod  #调用类的方法 
    def test1():    
        print ("this is static method")

     def __del__(self):
          print ("del....")
   self.f.close()

print gc.collect()     如果是0是没有回收的。
jack = People('green')
ren = People()            #实例化外部类
print ren.color        #通过对象访问属性是初始化后的值
print People.color    #通过类访问还是原来的值   
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.类的属性
    • 对象的创建
      • 类的属性
        • 装饰调用类的方法:
    • 2.类的方法
    • 3.类的内置方法
      • Python内部类:
        • 魔术方法:
          • 构造函数__str__
          • __init__(self)初始化类:
          • 析构函数__del__():释放资源
          • 垃圾回收机制:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档