Python面向对象class类属性及子类用法分析,Python面向对象类的继承实例详解

By admin in 编程 on 2019年6月4日

正文实例讲述了Python面向对象class类属性及子类用法。分享给大家供大家参谋,具体如下:

Python面向对象class类属性及子类用法解析,python面向对象

本文实例讲述了Python面向对象class类属性及子类用法。分享给我们供我们仿效,具体如下:

class类属性

class Foo(object):
  x=1.5
foo=Foo()
print foo.x#通过实例访问类属性
>>>1.5
print Foo.x #通过类访问类属性
>>>1.5
foo.x=1.7  #只改新实例属性,不会改变类属性
print foo.x
>>>1.7
print Foo.x
>>>1.5
foo.x+=0.2 ##只改新实例属性,不会改变类属性
print foo.x
>>>1.9
print Foo.x
>>>1.5
del foo.x ##删除更新的实例属性,默认变为类的属性
print foo.x
>>>1.5
print Foo.x
>>>1.5

class子类

父类:

class AddrBookEntry(object):
  "address book entry class"
  def __init__(self, nm, ph):
    self.name = nm
    self.phone = ph
    print "created instance for:", self.name
  def updatePhone(self, newph):
    self.phone = newph
    print "updated phone# for:", self.name

子类:

当一个类被派生出来,子类就连任了基类的属性。所以EmplAddrBookEntry承袭了AddrBookEntry的updatePhone的不二等秘书技。子类最佳自定义自身的构造器,不然基类的布局器会被调用。假诺子类重写了基类的构造器,基类的构造器就不会活动调用,除非被出示申明出来。

class EmplAddrBookEntry(AddrBookEntry):
  "employee address book entry class"
  def __init__(self, nm, ph, id, em):##重写基类构造器
    AddrBookEntry.__init__(self, nm, ph)
    self.empid = id
    self.email = em
  def updateEmail(self, newem):
    self.email = newem
    print "updated e-mail address for:", self.name

运用子类:

john = EmplAddrBookEntry("john doe","408-555-1212", 42, "[email protected]")
created instance for: john doe
>>> john
<__main__.EmplAddrBookEntry object at 0x02115FD0>
>>> john.name
'john doe'
>>> john.phone
'408-555-1212'
>>> john.email
'[email protected]'
>>> john.updatePhone("415-555-1212")
updated phone# for: john doe
>>> john.phone
'415-555-1212'
>>> john.updateEmail("[email protected]")
updated e-mail address for: john doe
>>> john.email
'[email protected]'

更加多关于Python相关内容感兴趣的读者可查看本站专项论题:《Python面向对象程序设计入门与进级教程》、《Python数据结构与算法教程》、《Python
Socket编制程序技能总括》、《Python函数使用本领总计》、《Python字符串操作手艺汇总》、《Python编码操作技巧总括》及《Python入门与进级杰出教程》

指望本文所述对大家Python程序设计具备援救。

本文实例讲述了Python面向对象class类属性及子类用法。分享给大家供我们参谋,具…

正文实例讲述了Python面向对象类的一连。分享给我们供我们参谋,具体如下:

class类属性

一、概述

面向对象编程 (OOP)
语言的3个重中之重意义正是“承袭”。承继是指那样壹种本领:它可以使用现有类的有着机能,并在没有要求再一次编辑原本的类的情况下对这一个效应实行扩充。

通过持续创制的新类称为“子类”或“派生类”,被接续的类称为“基类”、“父类”或“超类”,承接的长河,就是从一般到独特的进程。在少数
OOP
语言中,三个子类可以继续八个基类。但是一般情况下,三个子类只好有一个基类,要贯彻多种承继,能够因此多元继承来落到实处。

一连概念的落到实处情势主要有2类:完结持续、接口继承。

达成一连是指使用基类的习性和办法而无需额外编码的力量。

接口承接是指仅使用质量和格局的称谓、但是子类必须提供达成的手艺(子类重构爹类方法)。

在考虑选择持续时,有一点点需求小心,那正是四个类之间的关系应该是“属于”关系。举个例子,Employee
是一位,Manager 也是1位,因而那多个类都足以继续 Person 类。可是 Leg
类却不能够继续 Person 类,因为腿并不是一位。

OO开荒范式差不离为:划分对象→抽象类→将类组织改为档案的次序化结构(承接和合成)
→用类与实例举办统一希图和贯彻多少个阶段。

class Foo(object):
  x=1.5
foo=Foo()
print foo.x#通过实例访问类属性
>>>1.5
print Foo.x #通过类访问类属性
>>>1.5
foo.x=1.7  #只改新实例属性,不会改变类属性
print foo.x
>>>1.7
print Foo.x
>>>1.5
foo.x+=0.2 ##只改新实例属性,不会改变类属性
print foo.x
>>>1.9
print Foo.x
>>>1.5
del foo.x ##删除更新的实例属性,默认变为类的属性
print foo.x
>>>1.5
print Foo.x
>>>1.5

二、类的延续

class子类

二.一 继承的概念

class Person(object):  # 定义一个父类
  def talk(self):  # 父类中的方法
    print("person is talking....")
class Chinese(Person):  # 定义一个子类, 继承Person类
  def walk(self):   # 在子类中定义其自身的方法
    print('is walking...')
c = Chinese()
c.talk()   # 调用继承的Person类的方法
c.walk()   # 调用本身的方法

输出:

person is talking….
is walking…

父类:

二.二 构造函数的承接

假若我们要给实例 c
传参,我们就要动用到构造函数,那么构造函数该怎样几次三番,同一时候子类中又何以定义本身的品质?

承袭类的构造方法:

一.优秀类的写法: 父类名称.__init__(self,参数1,参数2,…)

  1. 新式类的写法:super(子类,self).__init__(参数1,参数2,….)
class Person(object):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.weight = 'weight'
  def talk(self):
    print("person is talking....")
class Chinese(Person):
  def __init__(self, name, age, language): # 先继承,在重构
    Person.__init__(self, name, age) #继承父类的构造方法,也可以写成:super(Chinese,self).__init__(name,age)
    self.language = language  # 定义类的本身属性
  def walk(self):
    print('is walking...')
class American(Person):
  pass
c = Chinese('bigberg', 22, 'Chinese')

要是大家只是轻松的在子类Chinese中定义2个构造函数,其实就是在重构。那样子类就不可能继续父类的性质了。所以大家在概念子类的构造函数时,要先一连再布局,那样大家也能获取父类的属性了。

子类构造函数基础父类构造函数进程如下:

实例化对象c —-> c
调用子类__init__()  —- >
子类__init__()承接父类__init__()  —– > 调用父类
__init__()

class AddrBookEntry(object):
  "address book entry class"
  def __init__(self, nm, ph):
    self.name = nm
    self.phone = ph
    print "created instance for:", self.name
  def updatePhone(self, newph):
    self.phone = newph
    print "updated phone# for:", self.name

二.3 子类对父类方法的重写

假如大家对基类/父类的法门要求修改,能够在子类中重构该方法。如下的talk()方法

class Person(object):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.weight = 'weight'
  def talk(self):
    print("person is talking....")
class Chinese(Person):
  def __init__(self, name, age, language):
    Person.__init__(self, name, age)
    self.language = language
    print(self.name, self.age, self.weight, self.language)
  def talk(self): # 子类 重构方法
    print('%s is speaking chinese' % self.name)
  def walk(self):
    print('is walking...')
c = Chinese('bigberg', 22, 'Chinese')
c.talk()

输出:

bigberg 22 weight Chinese
bigberg is speaking chinese

子类:

3、类继承的例子

class SchoolMember(object):
  '''学习成员基类'''
  member = 0
  def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex
    self.enroll()
  def enroll(self):
    '注册'
    print('just enrolled a new school member [%s].' % self.name)
    SchoolMember.member += 1
  def tell(self):
    print('----%s----' % self.name)
    for k, v in self.__dict__.items():
      print(k, v)
    print('----end-----')
  def __del__(self):
    print('开除了[%s]' % self.name)
    SchoolMember.member -= 1
class Teacher(SchoolMember):
  '教师'
  def __init__(self, name, age, sex, salary, course):
    SchoolMember.__init__(self, name, age, sex)
    self.salary = salary
    self.course = course
  def teaching(self):
    print('Teacher [%s] is teaching [%s]' % (self.name, self.course))
class Student(SchoolMember):
  '学生'
  def __init__(self, name, age, sex, course, tuition):
    SchoolMember.__init__(self, name, age, sex)
    self.course = course
    self.tuition = tuition
    self.amount = 0
  def pay_tuition(self, amount):
    print('student [%s] has just paied [%s]' % (self.name, amount))
    self.amount += amount
t1 = Teacher('Wusir', 28, 'M', 3000, 'python')
t1.tell()
s1 = Student('haitao', 38, 'M', 'python', 30000)
s1.tell()
s2 = Student('lichuang', 12, 'M', 'python', 11000)
print(SchoolMember.member)
del s2
print(SchoolMember.member)

输出:

—-end—–
just enrolled a new school member [haitao].
—-haitao—-
age 38
sex M
name haitao
amount 0
course python
tuition 30000
—-end—–
just enrolled a new school member [lichuang].
3
开除了[lichuang]
2
开除了[Wusir]
开除了[haitao]

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与晋级教程》、《Python数据结构与算法教程》、《Python函数使用本事总计》、《Python字符串操作技巧汇总》、《Python编码操作技艺总括》及《Python入门与进级卓越教程》

仰望本文所述对大家Python程序设计有所支持。

当2个类被派生出来,子类就卫冕了基类的性情。所以EmplAddrBookEntry承继了AddrBookEntry的updatePhone的格局。子类最棒自定义自身的构造器,不然基类的布局器会被调用。假若子类重写了基类的构造器,基类的构造器就不会活动调用,除非被出示评释出来。

你或者感兴趣的稿子:

  • Python面向对象类承接和构成实例分析
  • python面向对象_详谈类的承接与方法的重载
  • 举个例子解说Python面向对象编制程序中类的接轨
  • Python面向对象编制程序之继续与多态详解
  • Python面向对象之继续代码详解
  • Python面向对象程序设计之继续与多再而三用法解析
  • Python类定义和类承继详解
  • Python类的类别承继难点尖锐解析
  • 用实例解释Python中的承袭和多态的定义
  • Python面向对象之继续和整合用法实例深入分析
class EmplAddrBookEntry(AddrBookEntry):
  "employee address book entry class"
  def __init__(self, nm, ph, id, em):##重写基类构造器
    AddrBookEntry.__init__(self, nm, ph)
    self.empid = id
    self.email = em
  def updateEmail(self, newem):
    self.email = newem
    print "updated e-mail address for:", self.name

动用子类:

john = EmplAddrBookEntry("john doe","408-555-1212", 42, "john@spam.doe")
created instance for: john doe
>>> john
<__main__.EmplAddrBookEntry object at 0x02115FD0>
>>> john.name
'john doe'
>>> john.phone
'408-555-1212'
>>> john.email
'john@spam.doe'
>>> john.updatePhone("415-555-1212")
updated phone# for: john doe
>>> john.phone
'415-555-1212'
>>> john.updateEmail("john@doe.spam")
updated e-mail address for: john doe
>>> john.email
'john@doe.spam'

越来越多关于Python相关内容感兴趣的读者可查看本站专项论题:《Python面向对象程序设计入门与晋级教程》、《Python数据结构与算法教程》、《Python
Socket编制程序技术总括》、《Python函数使用技巧总括》、《Python字符串操作本领汇总》、《Python编码操作本事计算》及《Python入门与升级特出教程》

但愿本文所述对我们Python程序设计有着援助。

你恐怕感兴趣的篇章:

  • python面向对象_详谈类的承继与办法的重载
  • Python面向对象编程中关于类和艺术的就学笔记
  • Python面向对象编制程序中的类和指标学习课程
  • 浅谈python中的面向对象和类的大旨语法
  • 比喻讲明Python面向对象编制程序中类的持续
  • Python面向对象类承继和构成实例深入分析
  • Python面向对象类的继续实例详解
  • Python面向对象之静态属性、类措施与静态方法解析

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2020 澳门新葡亰官网app 版权所有