Python面向对象中类(class)的简单理解与用法分析

本文实例讲述了Python面向对象中类(class)的简单理解与用法。分享给大家供大家参考,具体如下:

我们先来创建一个简单的类

class Fish(object):
   pass
xiaoming = Fish()

一个基础类(base class) Fish(鱼)类就创建好了。class Fish(object)等同于class Fish()

caoyu = Fish() 语句创建了一个对象:xiaoming(小明)。变量名 = 类名+() 实例化 类

下面对Fish类进行扩充

class Fish():
  def weight(self,weight):
    print("鱼的重量:{}".format(weight))
xiaoming = Fish()
xiaoming.weight(100)

运行结果:

鱼的重量:100

关于self:

  • self代表类(class)的实例(instance)
  • self可以用其他词汇代替,name,you等,这只不过是约定俗成的
  • self必须定义,但不需要手动传值

我们在这个类里面定义了一个函数weight(),函数有两个参数self和weight,self我们只需要在创建函数时定义即可,传值调用时不用管。

当我们想给这个Fish类预设一些属性,初始化创建的实例化对象时,就可以定义一个__init__方法,在创建对象时自动进行初始化,

__init__前面是两个下划线

class Fish():
  def __init__(self):
    print("鱼都生活在水里。")
  def weight(self,weight):
    print("鱼的重量:{}".format(weight))
xiaoming = Fish()
#xiaoming.weight(100)

注释掉caoyu.weight(100)得到结果为:

鱼都生活在水里。

上面的代码定义了一个__init__方法,在caoyu这个对象建立的时候自动运行这个方法,打印输出了“鱼都生活在水里。”

创建了Fish() 鱼 类,突然觉得这个类包括的鱼太多了,那我们再来一个细分,即从Fish() 这个父类的基础之上,创建一个子类。子类继承了父类的一些属性,比如鱼都生活在水里,但又具有自己独有的特征,即属性。我们通过 class caoyu(Fish)定义了Fish父类下的caoyu(草鱼)子类。

class x(y)创建一个x类是y类的子类,就是创建子类的一般方法

class Fish():
  def __init__(self):
    print("鱼都生活在水里。")
  def weight(self,weight):
    print("鱼的重量:{}".format(weight))
class caoyu(Fish):
   pass
xiaoli = caoyu()

输出结果:

鱼都生活在水里。

从上面的代码可以看到,class caoyu(Fish)这个类是Fish的子类,子类会继承父类的属性。我们实例化caoyu类后,就输出了“鱼生活在水里”,继承自父类Fish()的__init__方法。我们也可以重新定义子类的__init__方法,父类的__init__方法就会失效,就像下面这样:

class Fish():
  def __init__(self):
    print("鱼都生活在水里。")
  def weight(self,weight):
    print("鱼的重量:{}".format(weight))
class caoyu(Fish):
   def __init__(self):
    print("鱼类都有鳃。但不会得腮腺炎。")
xiaoli = caoyu()

输出结果为:

鱼类都有鳃。但不会得腮腺炎。

我们也可以在子类中调用父类的函数

xiaoli.weight(100)

输出结果为:

鱼类都有鳃。但不会得腮腺炎。
鱼的重量:100

总结:

我们首先创建了一个基础类Fish(鱼)类(class),然后我们需要进行实例化(instance)出一个对象(object),我们实例化对象的名字叫做xiaoming(小明),就像我在菜市场买了一条鱼,我必须通过买这个动作(实例化),买了之后才拥有了一条鱼,一条属于我的“鱼”:xiaoming。然后我能用xiaoming这条鱼来煲汤(函数),做菜或者看他在水里游,这些动作就像调用类里面的函数一样,只有来了鱼才能做这些动作,为了做这些动作还需要加入葱姜蒜这些佐料(参数)。

而我们创建了子类caoyu(草鱼),草鱼也是鱼的一种,所以它也有父类Fish()的一些基本的属性,有鳃,可以在水里自由呼吸,同时也可以拿来煲汤,(这就继承了鱼的普遍属性)但它也有自己的特点,它可能做水煮鱼片比做酸菜鱼好吃,这是与其他鱼区别的地方。

  • class Fish(): 创建一个基本类 Fish
  • class caoyu(Fish): 创建一个类caoyu,它是类Fish()的子类
  • class Fish(): def init(self): 定义一个方法__init__,作用是对类class 进行初始化,比如给鱼基本属性:能在水中呼吸。
  • class Fish(): def weight(self, J):Fish()类下定义一个weight函数,接收self和J作为参数,用于说明鱼的重量
  • xiaoming = Fish(): 将xiaoming设置为类Fish()的一个实例
  • xiaoming.weight(J): 从xiaoming对象中找到函数weight,并用self和J参数调用它,self由Python自动填入,所以调用时只传入参数J

以上只是个人粗浅的理解,面向对象是个很深的东西,还需多多练习,慢慢消化理解!

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

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • Python面向对象编程中的类和对象学习教程

    Python中一切都是对象.类提供了创建新类型对象的机制.这篇教程中,我们不谈类和面向对象的基本知识,而专注在更好地理解Python面向对象编程上.假设我们使用新风格的python类,它们继承自object父类. 定义类 class 语句可以定义一系列的属性.变量.方法,他们被该类的实例对象所共享.下面给出一个简单类定义: class Account(object): num_accounts = 0 def __init__(self, name, balance): self.name =

  • python面向对象_详谈类的继承与方法的重载

    1. 类的继承与方法的重载 上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法. class Washer: company='ZBL' def __init__(self,water=10,scour=2): self._water=water #不想让用户直接访问实例变量,可以标志成私有 self.scour=scour self.year=2000#这是生产日期 #属性包装,将water属性包装成方法,用户使用water时实际是访问的方法 @st

  • Python面向对象之类和实例用法分析

    本文实例讲述了Python面向对象之类和实例用法.分享给大家供大家参考,具体如下: 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请参阅网上其他的资料. 面向对象最重要的概念就是类(Class)和实例(Instance),牢记 类 是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. 以Studen

  • Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

    本文实例讲述了Python面向对象程序设计类变量与成员变量.类方法与成员方法用法.分享给大家供大家参考,具体如下: 类变量与成员变量 在类中声明的变量我们称之为类变量[静态成员变量], 在init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量. 类变量直接可以通过类名来调用. 1.若类变量与成员同时存在并且同名 使用对象来调用的时候,获取的结果是成员变量的值, 使用类名来调用,获取的是类变量的值. 2.若类变量存在,成员变量不存在, 使用对象来调用的时候,它首先寻找成员变量, 如果

  • Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    本文实例讲述了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法.分享给大家供大家参考,具体如下: 1. 定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 self.data2=data2 def __func1(self): print("MyClass类的私有方法被调用!") def print_data(self): s

  • Python面向对象之接口、抽象类与多态详解

    本文实例讲述了Python面向对象之接口.抽象类与多态.分享给大家供大家参考,具体如下: 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 接口主要是java等语言中的概念,python中并没有明确的限定 from abc import ABCMeta,abstractmethod class Pay

  • Python 面向对象之类class和对象基本用法示例

    本文实例讲述了Python 面向对象之类class和对象基本用法.分享给大家供大家参考,具体如下: 类(class):定义一件事物的抽象特点,usually,类定义了事物的属性和它可以做到的性为 对象(object):是类的实例. 1.基本点 class MyClass(object): message = "hello,world" def show(self): print (self.message) 类名为MyClass 有一个成员变量:message,并赋予初值 类中定义了成

  • Python面向对象之静态属性、类方法与静态方法分析

    本文实例讲述了Python面向对象之静态属性.类方法与静态方法.分享给大家供大家参考,具体如下: 1. 静态属性:在函数前加@property,将函数逻辑"封装"成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用对象和类的属性的. # -*- coding:utf-8 -*- class Room: def __init__(self,name,owner,width,length): self.name = name self.owner = owner self.

  • Python面向对象类编写细节分析【类,方法,继承,超类,接口等】

    本文实例讲述了Python面向对象类编写技术细节.分享给大家供大家参考,具体如下: 类代码编写细节 继续学习类.方法和继承. class语句 以下是class语句的一般形式: class <name>(superclass,...): data = value def method(self,...): self.member = value 在class语句内,任何赋值语句都会产生类属性,而且还有特殊名称方法重载运算符.例如,名为__init__的函数会在实例对象构造时调用(如果定义过的话)

  • Python面向对象class类属性及子类用法分析

    本文实例讲述了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.

随机推荐