欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 类的定义及类的继承

程序员文章站 2022-06-06 21:02:00
一,类和类的定义: *面向对象的基础(实现类的过程当中实际上就是对现实事物的进一步抽象) *一种类型(类的类型) *类的实例称之为对象(例如 ‘瓶子’是一类型的东西, ‘桌子上的那个瓶子’,比较具体 是一个对象) *一种用户自定义的类型 *类里面有很多自定义的属性和方法(写代码的时候没有必要把所有的属性方法列出来,只需要列出有用到的就行) 例子:Cat类: 属性(变量,属性的名称):名称 种类 皮毛 猫龄 行为(方法 函数......

一,类和类的定义:

  *面向对象的基础(实现类的过程当中实际上就是对现实事物的进一步抽象)

  *一种类型(类的类型)

  *类的实例称之为对象(例如 ‘瓶子’是一类型的东西, ‘桌子上的那个瓶子’,比较具体 是一个对象)

  *一种用户自定义的类型

  *类里面有很多自定义的属性和方法(写代码的时候没有必要把所有的属性方法列出来,只需要列出有用到的就行)

     例子:Cat类:

          属性(变量,属性的名称):名称 种类 皮毛 猫龄

          行为(方法 函数):爱吃鱼 捉老鼠 喵喵叫

           Python 类的定义及类的继承

   二,类的属性和方法:

        1,类的特殊方法:

                 -构造函数:

                              *是一种特殊类型的方法(函数),他的类是实例化对象时被调用,构造函数通常用于初始化(赋值)给实例变量

                              *构造函数还验证有足够的资源来使对象执行任何启动任务

                              *构造函数是以双下划线(__)开头的函数类型,构造函数的名称是:__init__()

                              *创建对象时,如果需要,构造函数可接受传参,当创建没有构造函数的类时,Python会自动创建不执行任何操作的默认构造函数

                             *参数就是对象的属性,比如小王是一个类的话,那么他的名字就是他的一个属性,小王就是属性的值;

                     语法:

def __init__(self,name,*args,**kwargs):
          self.name = name
          pass

          说明:self代表当前类的实例对象, self.name表示将name绑定到实例上,即该类了有实例属性name, 等号右边的name表示__init__()中的参数name。在访问该属性时可以使用创建的实例对象调用

                 -析构函数:

                               *一般不用写,默认就会存在,Python解释器处理内存,不去要是哟个类的时候就自动收回内存

                          语法:

def __del__(self):
    pass

            -定义一个类:使用 class 语句来创建一个新类

                     例如 定义一个Cat的类:   

    说明 :class 名称(在里面尽量写入object,不仅与python2更有兼容性,即使里面没有东西也可以执行object,写不写一样,但是object换成其他类就是指这个类继承那个类)

class Cat(object):
    """猫科动物类"""
    def __init__(self,name):
        self.name = name
        pass
    def eat(self):
        pass

      2,其他类的特殊方法:

             -文档信息:__doc__

             -查看模块信息:__module__

            -自定义类属性:tag

            -自定义的类方法:catch

          *进入Python交互式环境,查dir(Cat) 会发现里面还有很多特殊的属性,如下图

            Python 类的定义及类的继承

           查看文档信息 Cat.__doc__  如下图,可看到代码中的文档注释

       Python 类的定义及类的继承

        Cat.__mudule__  返回模块的名称

       Python 类的定义及类的继承

     help(Cat)

      Python 类的定义及类的继承

   Cat.__class__  类的实例一个指向

    Python 类的定义及类的继承

    Cat.__bases__  返回一个元组显示所继承的类

   Python 类的定义及类的继承

     调整代码后 查看bases继承自哪里:

class Cat(object):
    """猫科动物类"""
    def __init__(self,name):
        self.name = name
        pass
    def eat(self):
        pass


class Tiger(Cat):
    pass

   重新进入环境:

         Python 类的定义及类的继承

        

   三,类的实例:

class Cat(object):
    # 类的属性,继承这个类的都可以使用
    tag = "我是家猫"
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary

    def set_salary(self,salary):
        """
        改变猫的价钱
        :param salary: init价钱
        :return: 更改后的价钱
        """
        self.salary = salary
        return self.salary

    def show_catInfo(self):
        """
         显示猫的信息
        :return:
        """
        rest = 'name:{0},salary:{1}元'.format(self.name,self.salary)
        print(rest)
        return rest

    def eat(self):
        """吃"""
        print('猫喜欢吃鱼')

    def catch(self):
        """捉老鼠"""
        print('猫能捉老鼠')



cat1 = Cat('加菲猫','10000')#创建类的对象
cat1.set_salary('20000') #改变加菲猫的价钱
cat1.show_catInfo()
cat1.eat()
cat1.catch()
#内置类属性调用
print('_______________________________________________')
print("Cat.__doc__:",Cat.__doc__)
print("Cat.__name__:", Cat.__name__)
print("Cat.__module__:", Cat.__module__)
print("Cat.__bases__:", Cat.__bases__)
print("Cat.__dict__:", Cat.__dict__)

 运行结果:

name:加菲猫,salary:20000元
猫喜欢吃鱼
猫能捉老鼠
_______________________________________________
Cat.__doc__: None
Cat.__name__: Cat
Cat.__module__: __main__
Cat.__bases__: (<class 'object'>,)
Cat.__dict__: {'__module__': '__main__', 'tag': '我是家猫', '__init__': <function Cat.__init__ at 0x006A87C0>, 'set_salary': <function Cat.set_salary at 0x006A8778>, 'show_catInfo': <function Cat.show_catInfo at 0x006A8730>, 'eat': <function Cat.eat at 0x006A86E8>, 'catch': <function Cat.catch at 0x006A86A0>, '__dict__': <attribute '__dict__' of 'Cat' objects>, '__weakref__': <attribute '__weakref__' of 'Cat' objects>, '__doc__': None}

    类的实例判断 :isinstance()

        print(isinstance(cat1,Cat)) #返回True 是Cat的实例

   

   四,类的继承

                实现代码的重用方法之一是通过继承机制

                *通过继承创建的新类成为子类或派生类,被继承的类称为基类或者父类

          1,继承的特点:

                   *如果在子类中需要父类的构造方法,就需显式的调用父类的构造方法,或者不重写父类的构造方法

                   *在调用基类的方法时,需要加上基类的类名前缀,且需要带上self 参数变量 。区别在于类中调用普通函数时并不需要带上self  参数。

                   *Python总是首先查找对应类型的方法,现在本类中查找调用的方法,找不到才去基类中找

           2,子类继承父类的构造说明:

                    *子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的 __init__()方法        

class Father(object):
    def __init__(self,name):
        self.name = name
        print('name:{0}'.format(self.name))
    def getName(self):
        return  'Father:' + self.name

class Son(Father):
    def getName(self):
        return 'Son:' + self.name

if __name__ == '__main__':
     son = Son('王')
     print(son.getName())

              运行结果:

            Python 类的定义及类的继承

 

              *子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的 __init__()方法 

class Father(object):
    def __init__(self,name):
        self.name = name
        print('name:{0}'.format(self.name))
    def getName(self):
        return '小兰的Father:' + self.name

class Son(Father):
    def __init__(self,name):
        print('老王的孩子')
        self.name = name
    def getName(self):
        return 'Son:'+ self.name

if __name__ == '__main__':
     son = Son('王')
     print(son.getName())

     运行结果:

        Python 类的定义及类的继承

 

           *子类重写 __init__()方法 又需要调用父类 方法:使用super关键字,语法:super(子类,self).__init__(参数1,参数2....)  

class Father(object):
    def __init__(self,name):
        self.name = name
        print('name:{0}'.format(self.name))
    def getName(self):
        return '小兰的Father:' + self.name

class Son(Father):
    def __init__(self,name):
        super(Son, self).__init__(name)
        self.name = name
    def getName(self):
        return 'Son:'+ self.name

if __name__ == '__main__':
     son = Son('王')
     print(son.getName())

        运行结果:

         Python 类的定义及类的继承

        是否是子类的判断:issubclass()

            print(issubclass(Son,Father))

 

本文地址:https://blog.csdn.net/qq_37029814/article/details/107166469