Python 类 初学者笔记
面对象编程:编写表现世界中的事物和景象的类,并基于这些类创建对象,被创建的对象称为实例化。
创建类
class Dog(): #Python中类名称中的首字母要大写
def __init__(self, name, age):#我是一个构造器
#类中的函数都称为【方法】,init__()是个特殊的方法,每当我们根据Dog类创建实例时,Python都会自动的运行它
#self必不可少且必须位于其它形参前面,
# 每个与类相关的方法调用都自动传入self,self让实例能够访问类中的属性和方法
self.name = name#以【self】为前缀的变量,可供类中所有【方法】使用,也可通过【实例】访问,我们称其为【属性】
self.age = age
def sit(self):
#self会自动传递name与age
print(self.name.title() + " is now sitting.")
def roll_over(self):
print((self.name.title() + " rolled over!"))
根据类创建实例
my_dog = Dog('willie',6) #根据类创建的实例名称应用小写
print("My dog's name is " + my_dog.name.title() + ".")#__init__并未显式的包含return语句,但Python自动返回了这条小狗的实例(name与age)
print("My dog is " + str(my_dog.age) + " years old.")
#print(my_dog.name + my_dog.age)调用属性相加
my_dog.sit()#实例中调用方法,Python在类Dog中查找方法sit()并运行其代码
my_dog.roll_over()
根据类创建多个实例
my_dog = Dog('willie', 6)
your_dog = Dog('lucy', 3)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")#实例my_dog的打印语句
print("You dog's name is " + your_dog.name.title() + ".")#实例your_dog的打印语句
print("You dog is " + str(your_dog.age) + " years old.")
属性
类中的每个属性都必须有初始值(可以是0和空字符)
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
self.day = 0#属性day的默认值为0
def update_a(self, new):
'''修改属性值的方法'''
self.day = new
'''禁止任何人把年龄往回调'''
#if new >= self.day :
# self.day = new
#else :
#print("返老还童?")
'''对属性值进行递增'''
# self.day += new
my_dog = Dog('willie',6)
"""修改属性值"""
my_dog.day = 18#通过实例直接修改
my_dog.update_a(18)#通过方法修改
继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。
创建子类时父类必须包含在当前文件中,且位于子类之前,
可使用 super() 将父类与子类关联起来
from car import Car
class ElectricCar(Car):#定义子类时必须在括号内指定父类名称
def __init__(self, manufacturer, model, year):
super().__init__(manufacturer, model, year)#让Pyton调用父类的方法__init__(),使ElecticCar包含父类的所有属性
my_tesla = ElectricCar('teska', 'models', 2016)#使用子类创建实例
print(my_tesla.get_descriptive_name())
父类方法重写(覆盖)
在子类中定义一个与父类方法同名的方法,则Python将不会考虑父类中的这个方法,而只关注子类中定义的相应方法
将类作为属性的实例调用:
from car import Car
class Battery():
def __init__(self, battery_size=60):
self.battery_size = battery_size
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def get_range(self):
if self.battery_size == 60:
range = 140
elif self.battery_size == 85:
range = 185
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
class ElectricCar(Car):
def __init__(self, manufacturer, model, year):
super().__init__(manufacturer, model, year)
self.battery = Battery()#将类用作属性
my_tesla = ElectricCar('teska', 'models', 2016)
my_tesla.battery.describe_battery()#将类用作属性的实例调用
导入类模块
从一个模块中导入多个类 from car import Car, ElecticCar
导入整个模块
因为要在类名前加上模块名所以不会发生覆盖,所以需要从一个模块导入很多类时,最好导入整个模块使用。
import car
my_car = car.Car('audi', 'a4', 2015)#使用car模块中的类创建实例,需要在类前加上模块名
print(my_car.get_descriptive_name())
my_car = car.ElectricCar('tesla', 'roadster', '2016')
print(my_car.get_descriptive_name)
使用Python标准库collections创建有序字典
from collections import OrderedDict favorite_languages = OrderedDict()#构建对象 favorite_languages['jen'] = 'python'#为对象填入元素
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python' for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " +
language.title() + ".")
from random import randint#一个很有意思的库随机生成数字 class Die():
'''一个会改变面的骰子'''
def __init__(self, sides=6):
'''控制面'''
self.sides = sides#sides def roll_die(self):
'''转骰子操作'''
for a in range(0,10):#控制循环
x = randint(1, self.sides)
print(x) a = Die()
a.roll_die()
b = Die()
b.sides = 10#改变骰子面数
b.roll_die()
工作流程:
开始时应该让代码结构尽可能简单,尽可能在在一个文件中完成所有工作,再将类移到独立的模块中。
每个模块应包含一段描述,对于其中的类能做什么也应有所描述
在类中使用一个空行来分隔方法;在模块中使用两个空格来分隔类
Python 类 初学者笔记的更多相关文章
- Python 函数 初学者笔记
定义函数 def greet_user(username):#定义一个名为greet_user的函数,username时个形参 print("Hello!" + usernam ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- Python学习笔记之面向对象编程(三)Python类的魔术方法
python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- 孤荷凌寒自学python第二十三天python类的封装
孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...
- 孤荷凌寒自学python第二十二天python类的继承
孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...
- Java初学者笔记
Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...
- 《简明python教程》笔记一
读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info 安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
随机推荐
- springboot中使用Caffeine本地缓存
Caffeine是使用Java8对Guava缓存的重写版本性能有很大提升 一 依赖 <dependency> <groupId>org.springframework.boot ...
- oracle问题之数据库恢复(三)
可能很多人在做数据库恢复时,都遇到过如下错误: SQL> recover database; ORA: recovery session canceled due to errors ORA: ...
- Linux vi & bash使用笔记
f 1.vi入门级命令 打开或新建 vi filename 有三种模式,刚开始进去的是一般模式,在一般模式下按 I 之后进入编辑模式 ,按Esc进入命令模式 在命令模式下按 :wq 保存退出 多个窗口 ...
- DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)
前言 由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染.但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的.如 ...
- 深度学习中的特征(feature)指的是什么?
一般在machine learning意义上,我们常说的feature,是一种对数据的表达.当然,要衡量一种feature是否是合适的表达,要根据数据,应用,ML的模型,方法....很多方面来看.一般 ...
- BZOJ 1025 [SCOI2009]游戏 (DP+分解质因子)
题意: 若$a_1+a_2+\cdots+a_h=n$(任意h<=n),求$lcm(a_i)$的种类数 思路: 设$lcm(a_i)=x$, 由唯一分解定理,$x=p_1^{m_1}+p_2^{ ...
- DOCKER 学习笔记9 Kubernetes (K8s) 生产级容器编排 上
前言 在上一节的学习中.我们已经可以通过最基本的 Docker Swarm 创建集群,然后在集群里面加入我们需要运行的任务 以及任务的数量 这样我们就创建了一个服务. 当然,这样的方式在我们本地虚拟机 ...
- Mysql事务结合spring管理
spring事务相关问题记录 遇到情况: 在本地单体应用调试代码时,发现在一个加了@transaction注解的方法里进行先更新后查询的操作,查询的结果是可以看到更新的内容的.而在微服务环境中同样的代 ...
- 20191230--python学习第一天(补)
1.py第一个脚本 打开电脑终端,功能键+R 输入命令:解释器路径+脚本路径(建议.py后缀) 2.编码 (1)初始编码 ascii,英文,8为表示一个东西,2**8 8位 = 1字节 unicod ...
- php面试笔记(5)-php基础知识-自定义函数及内部函数考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...