专栏首页大数据入坑指南python自学成才之路 类详细用法

python自学成才之路 类详细用法

文章目录

python类简介

python是一门面向对象编程的语言,python的类和java中的类思想上有很多一样的地方,比如python类也是通过class修饰,里面也有成员属性,成员方法,也有构造函数,也可以继承和重写父类方法等等,但是和jave的类在写法上有很大的不同。

创建一个类

class Animal():

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        # 私有属性
        self._sex = sex
        # 默认属性
        self.id = hash(self.name + str(self.age))

    def animalDesc(self):
        print("this is " + self.name + ", its age is " + str(self.age))

    def otherInfo(self):
        pass

    def getId(self):
        return self.id

    def getSex(self):
        print(self._sex)

博主这里不会对类做面面俱到的说明,默认看这篇文章的骚年已经有了一些面向对象的基本常识了(比如对java的类有一定了解),这里只会挑一些重点做说明: 1.class Animal() 在java中创建class时是没有这个()的,python这个()的是用来添加要继承的类,python允许多继承,博主这里没有用到继承,所以为空。 2. __init__这个方法就是类的构造方法,写法比较特殊,在java中类的构造方法和类名是一样的,python中构造方法统一为__init__。 3. self指的是当前实例本身,类似于java中的this,但是java中的this可以缺省,而python中的self必须存在(静态方法除外)。python会默认将自身对象实例传递给类中函数的第一个参数。 4. self.name,self.age都是属性,在java中属性是单独定义的,在python中属性是放在构造方法中通过self.xxx来定义的。 5. self._sex这个属性和self.name,self.age这样的属性不一样,self._xxx这样的属性是私有属性,只能在类内部访问,不能通过对象实例直接访问。 6. self.id这个是默认属性,在创建对象实例时不需要传递id这个参数。

实例的创建和使用

python中创建对象实例不需要使用new关键字,直接创建就可以。

    animal = Animal('pig', 2, 'female')
    animal.animalDesc()
    print('animal is ' + animal.name + ', sex is ' + animal.getSex())

类继承

python中实现了多继承,这和java不一样,java里面只能是单继承。虽然说可以使用多继承,但是继承一个类就能搞定的事最好不要继承多个类,程序越简单越好。

class Pig(Animal):

    def __init__(self, name, age, weight):
        super().__init__(name, age, 'female')
        # 子类特有属性
        self.weight = weight

    # 父类方法重写
    def otherInfo(self):
        print("the pig weights " + str(self.weight) + " kg.")

    # 子类特有方法
    def pigEat(self):
        print("I can eat more.")

上面是一个pig类,它继承自Animal类。 1.在子类的构造方法中必须先调用父类的构造方法,这个和java是一样的。 2.子类可以有自己的特有属性。 3.子类可以重写父类的方法。 4.子类可以有自己的特有方法。

导入模块中的类

前面有讲过通过import导入模块中的函数(传送门),也可以通过import导入模块中的类。 比如我新建一个AnimalTest.py文件,可以在AnimalTest.py文件中做如下导入操作: 1.导入整个模块 import Animal

pig = Animal.Pig("Pig", 2, 200)

2.导入模块中的部分类 from Animal import Animal,Pig

pig = Pig("Pig", 2, 200)

3.通过*导入模块中的所有类 from Animal import *

pig = Pig("Pig", 2, 200)

4.使用as给模块中的类创建别名 from Animal import Pig as p

pig = p("Pig", 2, 200)

静态方法

python中也支持静态方法,通过给一个方法加上@staticmethod注解,该方法就变成了一个静态方法,静态方法中不能存在self参数,静态方法可以被类直接调用。如下所示:

    @staticmethod
    def classDesc():
        print("this is a dog class")

  # 在Dog类中定义一个classDesc方法,使用@staticmethod注解为静态方法
  # 通过Dog类可以直接调用静态方法
  Dog.classDesc()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python自学成才之路 分布式计算解决方案actor

    以下内容来自于cookbook,个人觉得这篇文章对于设计分布式计算任务有一定的借鉴意义,感兴趣的同学可以阅读原文: https://python3-cookb...

    我是李超人
  • Python自学成才之路 魔术方法之一元,二元运算符

    一元运算符有+,-,~等,要想使这些一元运算符对对象起作用,需要在定义类的时候实现对应的魔术方法。

    我是李超人
  • Python自学成才之路 魔术方法之打印对象实例

    魔术方法:“魔术方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你...

    我是李超人
  • PyQt5 字体/颜色/打印/打印预览对话框

    用户6021899
  • Loxodon.Framework.XLua

    Loxodon.Framework.XLua 是一个XLua的开源的MVVM框架,它做为Unity3D的MVVM框架Loxodon.Framework的插件来使...

    Loxodon Studio
  • Python GUI项目实战(一)登录窗体的设计与实现

    前面我们学习了Python GUI 图型化界面Tkinter的基础知识,为了检测我们的学习成果,学以致用。我们从今天开始做一个综合Tkinter案例--基于Tk...

    小雨编程
  • 小蛇学python(2)两百行代码实现旅游中国34座大城市最短路径

    直接说基础语法,也许大家不会感兴趣。前言之后的这一章,给大家介绍一下我最近写出来的一个小功能。用python语言实现GA算法来解决TSP问题,希望以此来激发大家...

    用户2145057
  • ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!

    简介 项目主页: ReactiveCocoa 实例下载: https://github.com/ios122/ios122 简评: 最受欢迎,最有价值的iOS响...

    ios122
  • 干货 | 时间序列数据的对齐和数据库的分批查询

    在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如何把这些表在时间轴上进行对齐,从...

    用户1621951
  • python的tkinter编程(八)Entry组件的详细介绍,以登录界面作为讲解

    写一个按钮,绑定一个方法,当点击这个按钮的时候,就会执行这个方法,在这个方法里面 获取到对应的你输入的值,将获取到的值传到数据库里面进行比对,失败给一个返回的...

    一天不写程序难受

扫码关注云+社区

领取腾讯云代金券