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()
- Jquery ajax调用后台aspx后台文件方法(不是ashx)
- [原创]x.509证书在WCF中的应用(CS篇)
- tomcat
- 快速入门系列--WebAPI--01基础
- 分析程序员到底是不是吃青春饭
- Jquery dom搜索之siblings()方法
- 汽车黑科技!想想以后不是我们亲自驾驶汽车还是蛮开心的
- 快速入门系列--CLR--02多线程
- JavaScript之将JS代码放在什么位置最合适
- 快速入门系列--TSQL-01基础概念
- 初识javascript
- [原创]x.509证书在WCF中的应用(Web/IIS篇)
- Javascript之Dom学习
- 考试备战系列--软考--01基础架构概念
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- dplyr 包arrange对数据排序
- ELK 日志报警插件 ElastAlert
- 简单的源码免杀过av
- vue nextTick源码
- Kubernetes Informer机制源码解析
- @PostConstruct与@PreDestroy
- webpack插件怎么手写
- @Builder注解和@EqualsAndHashCode 注解剖析
- npm link和webpack流程
- vue mixins原理
- MySQL 5.7 特性:Online DDL
- vue国际化vue-i18n简单使用
- Kubernetes引入结构化日志
- ServerEndpoint注解无法注入NoticeService
- 警告:有用的警告|让Kubernetes的使用越来越容易