设为首页 收藏本站
查看: 1545|回复: 0

[经验分享] python面向对象,类

[复制链接]

尚未签到

发表于 2018-8-16 09:12:14 | 显示全部楼层 |阅读模式
  1:类和对象
  是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球体出来。
  2:类的定义
  类把需要的变量和函数组合成一起,这种包含称为“封装”。。classA(object):
  3:类的结构

  >  成员变量-属性              ## 类的属性是对数据的封装
  成员函数-方法              ## 类的方法是对类的行为进行封装
  类的创建:

  >  color = 'Black'          ## 类的属性-变量
  def fun(self):           ## 类的方法中必须有参数self,这是成员函数类的方法
  print "I am function"
#!/usr/bin/python  class People():
  color = 'yellow'             ## 成员变量
  def think(self):             ## 成员函数
  self.color = 'Black'     ## self表示类本身
  print 'I am a %s' % self.color
  print 'I am a thinker'
  ren = People()                   ## 把类赋予一个变量,即实例化
  print ren.color
  ren.think()
  4:类的属性
  公有属性:在类中类外都可以使用。
  私有属性:只能在类中使用,定义方式为__name(双下划线)
  内置属性:由系统定义类的时候默认添加的,由前后双下划线构成。__dict__,__module__。
#!/usr/bin/python  class People():
  color = 'yellow'
  __age = 20
  def think(self):
  self.color = 'Black'
  print 'I am a %s' % self.color
  print 'I am a thinker'
  print self.__age   ## 私有函数,只能在类中使用
  ren = People()
  print ren.color
  ren.think()
  print ren._People__age     ## 仅测试使用,类外使用私有函数
  5:类的方法相当于函数,类的属性相当于变量。
  方法的定义跟函数一样,但是需要self作为第一个参数。
  公有方法:跟公有属性一样,类内类外都可以使用
  私有方法:跟私有属性一样,只能类内使用。__self
  self:用来区分类跟方法,self本身表示类
  类方法:被classmethod编译过的函数,能被类所调用,也能被对象调用(继承的关系)
  静态方法:被staticmethod编译过的函数,可以被类直接调用,静态方法不需要设置self参数。
  装饰器:
  @classmethod:类方法
  @staticmethod:静态方法
  6:对象的创建
  创建对象的过程称之为实例化:当一个对象被创建后,包含三个方面的特性:对象句柄,属性,方法。句柄用来区分对象。
  对象的属性和方法与类中的成员变量和成员函数相对应
  object=MyClass() ## 创建类的一个实例(对象),通过对象来调用方法和属性
#!/usr/bin/python  # coding:utf-8
  class MyClass1(object):                   ## 类
  color = 'Yellow'                      ## 类的属性--变量
  __age = 20                            ## 类的私有属性,只能在类中使用
  @classmethod
  def __hide(self):                     ## 类的隐藏方法,只能在类中使用
  print "I am hidemethods!"
  @classmethod                          ## 装饰,对象和类都可以调用
  def fun(self):                        ## 类的方法--函数
  print self.__age                  ## self等同类,表示调用类的私有属性
  print 'This is function!'
  @staticmethod                         ## 装饰,对象和类都能调用,不需要self
  def fun1():                           ## 不需要self
  print MyClass1.color              ## 直接使用类调用类的属性或方法
  MyClass1.__hide()                 ## 调用类的隐藏方法
  class InsideClass(object):            ## 类中类,内部类
  Inside = 'Red'                    ## 内部类的属性
  @classmethod
  def InsideFun(self):              ## 内部类的方法
  print self.Inside
  object = MyClass1()                       ## 对象,实例化类
  object.fun()                              ## 对象调用类的方法
  MyClass1.fun()                            ## 类调用类的方法
  MyClass1.fun1()
  object_inside = object.InsideClass()      ## 先调用外部类,再调用内部类
  MyClass1.InsideClass.InsideFun()          ## 调用内部类的方法
  print object_inside.Inside                ## 调用内部类的属性
  7:内部方法(魔术方法)
  def __str__(self):               ## 如果直接实例化类,会返回__str__的值,而不是提示这样

  return "This is>  构造函数
  def __init__(self,c='Black'):       ## 初始化对象的属性,但不会改变类的属性
  self.color = c
  析构函数
  def __del__(self):                         ## 主要用于释放资源,一般执行与脚本的最后
#!/usr/bin/python  class PeoPle(object):
  color = 'Black'
  def __init__(self,c):                         ## 初始化属性,c需要在实例化类的时候,跟在后面
  self.color = c
  print "Init runinng ......"               ## 只要把类实例化成对象,就会打印这行,
  def fun1(self):
  print "Color is: %s" % self.color
  pe = PeoPle('Red')
  print "Object print is: %s" %pe.color             ## __init__会影响对象的属性
  print "Class print is: %s" %PeoPle.color          ## 类不会受__init__的影响
  类的继承:
  单类继承
#!/usr/bin/python  class PeoPle(object):
  color = 'Black'
  def __init__(self,c):                   ## 初始化参数
  self.color = c
  print "Init runinng ......"
  @classmethod                            ## 装饰方法,使其对象和类都可以调用
  def fun1(self):
  print "Color is: %s" % self.color
  class MyClass(PeoPle):                      ## 继承父类PeoPle
  color = 'MyClass'
  def __init__(self):
  PeoPle.__init__(self.'Red')         ## 表示继承父类的__init__构造函数。
  @classmethod
  def fun1(self):
  print "This is MyClass the function"
  pass
  my=MyClass()                      ## 由于MyClass类中继承过PeoPle里的__init__参数。
  print MyClass.color               ## 优先返回MyClass里的属性
  my.fun1()                         ## 优先返回MyClass里的方法
  PeoPle.fun1()                     ## 返回PeoPle里的fun1方法
  MyClass.fun1()                    ## 返回MyClass里的fun1方法
  pe = PeoPle('Green')              ## 由于PeoPle初始化__init__那里需要俩个参数,所以这里要加一个参数
  print "Object print is: %s" % pe.color  ## 打印初始化后对象的属性即Green
  print "Class print is: %s" % PeoPle.color  ## 打印类属性即Black
  多类继承:
#!/usr/bin/python  class PeoPle(object):
  def __init__(self):
  self.dwell = 'Earth'
  self.color = 'Yellow'
  def think(self):
  print "I dwell am %s!" % self.dwell
  class Chinese(object):
  color = 'Black'
  def __init__(self):
  self.dwell = 'China'
  def think(self):
  print "I am chinese %s " % self.color
  class MyClass(Chinese,PeoPle):       ## 默认首先继续第一个类的属性跟方法
  def __init__(self):
  PeoPle.__init__(self)        ## 表示使用指定类的属性
  pass
  my = MyClass()
  my.think()                           ## 返回I am Chinese Yellow
  类的属性---总结

  •   类属性(公有属性): 可以在类中使用,相当于变量。
  •   类私有属性(私有属性): 只能函数中使用,无法被对象调用
  •   对象的公有属性: 对象可以调用
  •   对象的私有属性: 只能类中调用
  •   内置属性:
  •   函数的局部变量: 只能在本函数中使用
  •   函数的全局变量: 可以在类中所有的函数里使用
#!/usr/bin/python  # coding:utf8
  val6 = "全局变量"
  print '*' * 50
  class My(object):
  val1 = "类的公有属性 val1"
  __val2 = "类的私有属性 __val2"
  def fun(self):
  self.val3 = "对象的公有属性 val3"
  self.__val4 = "对象的私有属性 __val4"
  val5 = "函数的局部变量,只能在本函数使用"
  global val6
  val6 = "函数的全局变量,可以在类中所有的函数中使用"
  def fun1(self):
  print val6
  my = My()
  print my.val1
  print my._My__val2
  my.fun()
  print '*' * 50
  my.fun1()
  类的方法总结:

  •   公有方法:
  •   私有方法:
  •   类方法:
  •   静态方法:
  •   内置方法:
#!/usr/bin/python  #-*- coding:utf8 -*_
  class MyClass(object):
  name = 'Warning'
  def __init__(self):
  self.fun1()
  self.__fun2()
  self.fun3()
  self.fun4()
  def fun1(self):
  print "%s %s" % (self.name,'我是公有方法')
  def __fun2(self):
  print "%s %s" % (self.name,'我是私有方法')
  @classmethod
  def fun3(self):
  print "%s %s" % (self.name,'我是类方法')
  @staticmethod
  def fun4():
  print "%s %s" % (MyClass.name,'我是静态方法')
  my = MyClass()
  my.fun1()                           ## 调用公有方法
  MyClass.fun3()                      ## 调用类方法
  MyClass.fun4()                      ## 调用静态方法,注意静态方法不需要self,与类方法的区别



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552470-1-1.html 上篇帖子: python\shell个性化vim设置的方法 下篇帖子: Python 学习笔记 - Paramiko 模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表