面对象编程:编写表现世界中的事物和景象的类,并基于这些类创建对象,被创建的对象称为实例化。

创建类

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 类 初学者笔记的更多相关文章

  1. Python 函数 初学者笔记

      定义函数 def greet_user(username):#定义一个名为greet_user的函数,username时个形参 print("Hello!" + usernam ...

  2. 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 ...

  3. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  4. 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘

    孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...

  5. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  6. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  7. Java初学者笔记

    Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...

  8. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  9. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

随机推荐

  1. 保存网页内容到excel

    from selenium import webdriverfrom time import sleepfrom selenium.common.exceptions import NoSuchEle ...

  2. 使用GoldenGate完成MySQL到MySQL的同步

    (一)基础环境配置   源库 目标库 操作系统版本 CentOS Linux release 7.4 CentOS Linux release 7.4 IP地址 192.168.10.11 192.1 ...

  3. Rust语言Actix-web框架连接Redis数据库

    Rust语言Actix-web框架连接Redis数据库 actix-web2.0终于发布了,不再是测试版本,基于actor系统再加上异步支持,使得actix-web成为了目前响应速度最快的服务器框架, ...

  4. kubernetes中node心跳处理逻辑分析

    最近在查看一个kubernetes集群中node not ready的奇怪现象,顺便阅读了一下kubernetes kube-controller-manager中管理node健康状态的组件node ...

  5. Codeforces_442_A_枚举

    http://codeforces.com/problemset/problem/442/A 想想成5*5的图,一共能划10条线,枚举2^10次即可. 判断每种情况是否符合条件的方法,若存在点,被线穿 ...

  6. Go语言实现:【剑指offer】滑动窗口的最大值

    该题目来源于牛客网<剑指offer>专题. 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存 ...

  7. Jmeter之下载文件

    前言 我们可以利用postman工具来测试下载文件的接口,那么假如要利用Jmeter工具来进行下载接口的测试,又该如何测试呢? 下载文件的接口地址:/pinter/file/api/download? ...

  8. JumpServer部署与管理

    一.JumpServer 堡垒机概述 JumpServer由Python/Django进行开发.使用GNU GPL v2.0开源协议.也是全球首款完全开源的堡垒机.同时配备了业界领先的Web Term ...

  9. Ambari HDP 下 SPARK2 与 Phoenix 整合

    1.环境说明 操作系统 CentOS Linux release 7.4.1708 (Core) Ambari 2.6.x HDP 2.6.3.0 Spark 2.x Phoenix 4.10.0-H ...

  10. 使用Java8 Files类读写文件

    Java8 Files类的newBufferedReader()和newBufferedWriter()方法 这两个方法接受Path类型的参数.Path 类是Java8 NIO中的接口.可以由Path ...