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 ...
随机推荐
- 死磕java(4)
数组 public void int4() { int[] int2 = {1,2,3,4}; System.out.print(int2[2]); } 输出:3 另一种数组的初始化 public ...
- QT笔记:数据库总结
http://blog.csdn.net/reborntercel/article/details/6991147 #include <QtSql> QT += sql QSqlDatab ...
- shell命令之一天一见:grep
一. 简介 grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 ...
- CCF_201512-1_数位之和
水. #include<iostream> #include<cstdio> using namespace std; int main() { ; cin >> ...
- 罗德里格斯旋转公式(Rodrigues' rotation formula)推导
本文综合了几个相关的维基百科,加了点自己的理解,从比较基础的向量投影和叉积讲起,推导出罗德里格斯旋转公式.公式比较繁杂,如有错误,欢迎评论区指出. 对于向量的三维旋转问题,给定旋转轴和旋转角度,用罗德 ...
- python学习(5)写一个二分算法的程序
把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...
- Liunx 上安装java
linux系统的基本指令 http://www.cnblogs.com/sxdcgaq8080/p/7470796.html ===================================== ...
- 制作一个docker镜像:mysql-8-x64-linux
因为个人学习需要,为软件系统的虚拟容器化,以下将mysql制作为docker镜像,并记录下详细步骤. 欢迎大家学习交流和转载,同时写作不易,如果各位觉得不错,请点赞支持. 备注:以下代码和文章,欢迎复 ...
- k8s 安装ELK(6.7.0版本)和EFK
一.Elasticsearch安装 helm安装的也行,而且helm安装的stable/elasticsearch可用性更高,但是使用资源更多. 1.安装elasticsearch(线上环境千万记得把 ...
- Django 配置文件 settings.py
1. dubug配置 DEBUG=False 2. 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', &qu ...