0%

第九节:类

自动摘要: title:第九节:类 tags: 课后解答 url:230.html id:230 categories: 学习 教学 date:2018051222: ……..

title: 第九节:类
tags:
- 课后解答
url: 230.html
id: 230
categories:
- 学习
- 教学
date: 2018-05-12 22:15:10

类定义:

用来描述具体相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。对象是类的示例 类 Class: 用来描述具体相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。对象是类的示例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量用于处理类及其实例对象的相关数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其 进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 实例变量:定义在方法中的变量,只作用于当前实例的类。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟”是一个(is-a)”关系(例图,Dog是一个Animal)。 实例化:创建一个类的实例,类的具体对象。就是将创建的类赋值给另一个变量。理解为赋值即可,a = class(),这个过程,就叫做实例化 方法:类中定义的函数。 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

类有这样一些的优点

1 ) 、类对象是多态的:也就是多种形态,这意味着我们可以对不同的类对象使用同样的操作方法,而不需要额外写代码。 2 ) 、类的封装:封装之后,可以直接调用类的对象,来操作内部的一些类方法,不需要让使用者看到代码工作的细节。 3 ) 、类的继承:类可以从其它类或者元类中继承它们的方法,直接使用。

属性:

1:实例属性: 在__init__(self,…)中初始化 内部调用时都需要加上self. 外部调用时用实例化对象.属性名 2:类属性: 在__init__()外初始化 在内部用类名.类属性名调用 外部既可以用类名.类属性名又可以用实例化对象.类属性名来调用 3:私有属性: 1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改 2):双下划线__开头:外部不可通过实例化对象.属性名来访问或者更改 实际将其转化为了**类名__属性名**,只是在内部将变量名修改了,我们仍让可以通过._类名_属性名访问

类属性的修改

字典为可变类型,而数字是不可变类型,因此无法通过这种方式修改。所以在实际开发中应该避免通过实例对象去修改类属 性。  

类的继承:

继承类的构造方法: 1.经典类的写法: 父类名称.__init__(self,参数1,参数2,…) 2. 新式类的写法: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``talk(``self``): ``# 子类 重构方法

print``(``'%s is speaking chinese'``%``self``.name)

方法: # --coding:utf-8-- # 普通方法,类方法,静态方法的区别 __metaclass__ = type class Tst: name = ‘tst’ data = ‘this is data’ # 普通方法 def normalMethod(self, name):                   print self.data, name # 类方法,可以访问类属性 @classmethod def classMethod(cls, name):                       print cls.data, name # 静态方法,不可以访问类属性 @staticmethod def staticMethod(name):                         print name

  • 三种方法都可以通过实例来调用,但是静态方法和类方法无法访问实例属性,所以更改了tst.data仅对普通方法起了作用
  • 普通方法不能通过类名调用,但是静态方法和类方法是可以的
  • 普通方法,可以通过self访问实例属性
  • 类方法,可以通过cls访问类属性
  • 静态方法,不可以访问,通过传值的方式

欢迎关注我的其它发布渠道