python类、继承
Python 是一种面向对象的编程语言。Python 中的几乎所有东西都是对象,拥有属性和方法。类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
一、python 类
1 创建类
使用 class 关键字
实例
使用名为 x 的属性,创建一个名为 MyClass 的类
class MyClass:
x = 5
2 创建对象
现在我们可以使用名为 myClass 的类来创建对象:
实例
创建一个名为 p1 的对象,并打印 x 的值:
p1 = MyClass()
print(p1.x)
3 __init__() 函数
上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。要理解类的含义,我们必须先了解内置的 __init__() 函数。所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:
实例
创建名为 Person 的类,使用 __init__() 函数为 name 和 age 赋值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age p1 = Person("Bill", 63) print(p1.name)
print(p1.age)
注释:每次使用类创建新对象时,都会自动调用 __init__() 函数。
4 对象方法
对象也可以包含方法。对象中的方法是属于该对象的函数。让我们在 Person 类中创建方法:
实例
插入一个打印问候语的函数,并在 p1 对象上执行它:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age def myfunc(self):
print("Hello my name is " + self.name) p1 = Person("Bill", 63)
p1.myfunc()
提示:self 参数是对类的当前实例的引用,用于访问属于该类的变量。
self 参数
self 参数是对类的当前实例的引用,用于访问属于该类的变量。它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数:
实例
使用单词 mysillyobject 和 abc 代替 self:
class Person:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age def myfunc(abc):
print("Hello my name is " + abc.name) p1 = Person("Bill", 63)
p1.myfunc()
修改对象属性
把 p1 的年龄设置为 40:
p1.age = 40
删除对象属性
del p1.age
删除对象
del p1
二、继承
继承允许我们定义继承另一个类的所有方法和属性的类。父类是继承的类,也称为基类。子类是从另一个类继承的类,也称为派生类。
1 创建父类
任何类都可以是父类,因此语法与创建任何其他类相同:
实例
创建一个名为 Person 的类,其中包含 firstname 和 lastname 属性以及 printname 方法:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname def printname(self):
print(self.firstname, self.lastname) # 使用 Person 来创建对象,然后执行 printname 方法: x = Person("Bill", "Gates")
x.printname()
2 创建子类
要创建从其他类继承功能的类,请在创建子类时将父类作为参数发送:
实例
创建一个名为 Student 的类,它将从 Person 类继承属性和方法:
class Student(Person):
pass
实例
使用 Student 类创建一个对象,然后执行 printname 方法:
x = Student("Elon", "Musk")
x.printname()
添加 __init__() 函数
到目前为止,我们已经创建了一个子类,它继承了父类的属性和方法。我们想要把 __init__() 函数添加到子类(而不是 pass 关键字)。
注释:每次使用类创建新对象时,都会自动调用 __init__() 函数。
实例
为Student 类添加 __init__() 函数:
class Student(Person):
def __init__(self, fname, lname):
# 添加属性等
当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
注释:子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。
如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:
实例
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
使用 super() 函数
Python 还有一个 super() 函数,它会使子类从其父继承所有方法和属性:
实例
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
添加属性
实例
把名为 graduationyear 的属性添加到 Student 类:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019
添加方法
实例
把名为 welcome 的方法添加到 Student 类:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
python类、继承的更多相关文章
- python 类继承演示范例的代码
把做工程过程重要的代码片段备份一次,下面的资料是关于python 类继承演示范例的代码. # a simple example of a class inheritance # tested with ...
- python类继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制.继承完全可以理解成类之间的 类型和子类型 关系. 假设你想要写一个程序来记录学校之中的教师和学生情况.他们有一些 ...
- Python 类继承,__bases__, __mro__, super
Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... ...
- Python类继承(转发)
目录 一.概述 二.类的继承 2.1 继承的定义 2.2 构造函数的继承 2.3 子类对父类方法的重写 三.类继承的事例 回到顶部 一.概述 面向对象编程 (OOP) 语言的一个主要功能就是“继承”. ...
- 第7.7节 案例详解:Python类继承机制
本节实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识.例子以车.汽车为例,车为父类.汽车为子类. 一. 定义父类Vehicle class Vehicle(): def __ ...
- python 类 - 继承
继承 什么是继承? 编写类时,并非总要从空白开始.如果要编写的类是另一个现成类的特殊版本,可使用继承. 一个类继承另一个类时,将自动获得另一个类的所有属性和方法.现有的类称为父类,而新类称为子类. 子 ...
- python类继承的重写和super
给已经存在的类添加新的行为,继承是非常好的实现方式.但是如果要改变行为呢?比如在Python继承扩展内置类,我们的contact类只允许一个名字和一个邮箱,但是如果要对某些人增加电话号码呢?这里可以通 ...
- python 类继承与子类实例初始化
From: https://blog.csdn.net/cs0301lm/article/details/6002504?utm_source=blogxgwz4 [ 先贴参考书籍原文(中文英文对照) ...
- python 类继承
#!/usr/bin/python # Filename: inherit.py class SchoolMember: '''Represents any school member.''' def ...
- Python类继承,方法重写及私有方法
# -*- coding: utf-8 -*- """ Created on Mon Nov 12 15:05:20 2018 @author: zhen "& ...
随机推荐
- Server-Speaks-First 有点坑,Linkerd 2.10 中的协议检测和不透明端口
协议检测(Protocol detection),顾名思义,允许 Linkerd 自动检测 TCP 连接中使用的协议. Linkerd 的设计原则之一是"just work",协议 ...
- 解析java源文件
尝试从java源文件中解析出类.方法.属性等信息,但下面的代码没有完全实现. Sub parseJava() Dim package_name as String 'read a file Docum ...
- Git 使用revert回滚已提交的commit
在git使用中如果提交错误的代码至远程服务器,可以使用git revert 命令回滚单次commit并且不影响其他commit. 回滚最新一次的提交记录: git revert HEAD 回滚前一次的 ...
- html 去除重复边框
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- Java面试常见基础问题
1.equals和==有什么区别? ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致. 如:两个String对象存储的值是一样的,但是可能在内存里存储在不同的地方. equals ...
- JVM的GC机制
JVM的GC机制 1. 什么对象会被回收 引用计数法:如果一个对象被引用一次,则记录引用次数加一,如果引用取消,则减一,当减到0时,需要被回收. 问题:循环引用,A引用B,B引用A,除此之外,已经无法 ...
- STM32—驱动GY85-IMU模块
GY85是一个惯性测量模块,内部集成了三轴加速度计.三轴陀螺仪.电子罗盘.气压传感器等芯片,用于测量和报告设备速度.方向.重力,模块可以将加速度计.陀螺仪.电子罗盘等传感器的数据进行综合,在上位机可以 ...
- SQL Server 判断数据库中是否存在表
使用场景 可以反复的执行相同脚本 方式1:查询sysobjects表 if EXISTS (SELECT * from sysobjects WHERE name='test_table') DROP ...
- NOIP 模拟 $27\; \rm 牛半仙的妹子序列$
题解 \(by\;zj\varphi\) 明显一道极长上升子序列的题. 直接线段树维护单调栈,最后单调栈求出可以贡献的序列,答案相加就行. Code #include<bits/stdc++.h ...
- layui关闭弹出框
layer.close(index) - 关闭特定层 //当你想关闭当前页的某个层时 var index = layer.open(); var index = layer.alert(); var ...