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

[经验分享] python 类

[复制链接]

尚未签到

发表于 2017-4-21 09:16:34 | 显示全部楼层 |阅读模式
  #!coding=utf-8
  #python 类的定义
  class Account(object):
  num_accounts = 0    #此处的 num_accounts 为类变量,所有的实例共享
  def __init__(self,name,blance):  #__init__ 在类的实例创建后被立即调用。它可能会引诱你称之为类的构造函数,
  #但这种说法并不正确。说它引诱,是因为它看上去像 (按照习惯,__init__ 是类中第一个定义的方法),
  #行为也像 (在一个新创建的类实例中,它是首先被执行的代码),并且叫起来也像 
  #(“init”当然意味着构造的本性)。说它不正确,是因为对象在调用 __init__ 时已经被构造出来了,
  #你已经有了一个对类的新实例的有效引用。但 __init__ 是在 Python 中你可以得到的最接近构造函数的东西,
  #并且它也扮演着非常相似的角色。
  self.name = name
  self.blance = blance
  Account.num_accounts +=1
  def __del__(self):
  Account.num_accounts-=1
  def inqirey(self):
  return self.blance
  #__init__ 方法是可选的,但是一旦你定义了,就必须记得显示调用父类的 __init__ 方法 
  #(如果它定义了的话)。这样更是正确的:无论何时子类想扩展父类的行为,后代方法必须在适当的时机,使用适当的参数,显式调用父类方法
  #访问类的成员的方法
  print Account.num_accounts
  print Account.__init__
  class Money(object):
  def __init__(self,types,num,name,action):
  self.types = types
  self.num = num
  self.name=name
  class Test(Money,Account):#python类的多继承,python虽然支持多继承,但是最好使用单继承,免得混淆
  def inqirey(self):
  super(Test,self).inqirey() #调用父类的inqirey()方法
  print "hello"
  pass
  #t = test('jack',4)
  #print Test.__mro__   要找到使用了多重继承的属性,可以在列表中队所有基类按从“最特殊”的类到“最不特殊的类这种进行排列,
  #然后再搜索属性时,就会按账号顺序搜索列表,直到找到该属性
  #第一个定义,对于任何一个类,通过打印它的__mro__属性即可看到基类的顺序,例如Test类中的name属性,如果要打印name属性,到底是Money,中的name,还是Account的name,是按照基类的继承属性来的
  *****静态方法
  #@staticmethod 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类进程操作,
  #如果在编写类时需要采用很多种不同方式来创建新实例,则常常使用静态方法
  import time
  class Date(object):
  def __init__(self,year,month,day):
  self.year = year
  self.month = month
  self.day = day
  def test(self):
  print "hello"
  @staticmethod
  def now():
  t = time.localtime()
  return Date(t.tm_year,t.tm_mon,t.tm_mday)
  @staticmethod
  def tomorrrow():
  t  = time.localtime(time.time()+86400)
  return Date(t.tm_year,t.tm_mon,t.tm_mday)
  a = Date(1967,4,5)
  b = Date.now()
  print b.day
  c = Date.tomorrrow()
  print c.day
   *****类方法
  #@classmethod 类方法是将类本身作为对象进行操作的方法,与实例方法不同,因为根据约定,类是作为第一个参数(名为cls)传递的,实例方法是self作为第一个参数
  class Times(object):
  factor = 1
  @classmethod
  def mul(cls,x):
  return cls.factor*x
  class TwoTimes(Times):
  factor = 2
  x = TwoTimes.mul(4)  #调用Times.mul(TwoTimes,4)
  *****特性
  #@property  支持以简单形式访问后面的方法,无需像平常一样添加额外的()调用该方法
  import math
  c = None
  class Circle(object):
  def __init__(self,radius):
  self.radius = radius
  @property
  def area(self):
  return math.pi*self.radius**2
  c = Circle(5)
  print c.area
  #数据封装和私有属性
  #私有属性,其他子类是不能访问的
  #类中所有以双下划线(__)例如:__foo ,都会自动变形,形成具有_类名__foox形式的新名称,这提供了一种在类中包含私有属性和私有方法的有效方式
  #,因为派生类中使用的私有名称不会与
  #基类中使用的相同私有名称发生冲突
  class A(object):
  def __init__(self):
  self.__x = 3        #变形为self._A__x
  def __spam(self):
  pass                #变形为_A__spam()
  def bar(self):
  self.__spam         #调用A.__spam()
  class B(A):
  def __init__(self):
  A.__init__(self)
  self.__x = 37
  def __spam(self):
  print "hello"                #变形为_B__spam()
  class T(object):
  __slots__ = ('name','blance')
  def __init__(self):
  self.name = 'jack'
  self.blance = '120'
  self.hometowm='wuhan'
  class M(T):
  pass

运维网声明 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-367165-1-1.html 上篇帖子: python jsonToxml 下篇帖子: python 语法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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