原文地址https://blog.csdn.net/weixin_42134789/article/details/80194788

https://blog.csdn.net/happyjxt/article/details/50760467

类(Class)与对象(Object)

# 创建一个学生类
class Student:
   
   # 定义学生属性,初始化方法
   def __init__(self, name, score):
       self.name = name
       self.score = score    # 定义打印学生信息的方法
   def show(self):
       print("Name: {}. Score: {}".format(self.name, self.score))

在这个案例中,我们只定义了一个抽象的类,电脑并没有创建什么存储空间。只有当我们完成类的实例化(Instance)时,电脑才会创建一个具体的对象(Object),并为之分配存储空间。所以对象(Object)是类(Class)的一个实例。

要创建一个具体的学生对象(Object),我们还需要输入:

student1 = Student("John", 100)
student2 = Student("Lucy", 99)

这个新Student类看上去应该是这样的:

# 创建一个学生类
class Student:    # number属于类变量,定义在方法外,不属于具体实例
   number = 0    # 定义学生属性,初始化方法
   # name和score属于实例变量,定义在方法里
   def __init__(self, name, score):
       self.name = name
       self.score = score
       # 此处有错误
       number = number + 1    # 定义打印学生信息的方法
   def show(self):
       print("Name: {}. Score: {}".format(self.name, self.score))

# 创建一个学生类
class Student:    # number属于类变量,不属于某个具体的学生实例
   number = 0    # 定义学生属性,初始化方法
   # name和score属于实例变量
   def __init__(self, name, score):
       self.name = name
       self.score = score
       Student.number = Student.number + 1    # 定义打印学生信息的方法
   def show(self):
       print("Name: {}. Score: {}".format(self.name, self.score)) # 实例化,创建对象
student1 = Student("John", 100)
student2 = Student("Lucy", 99) print(Student.number)  # 打印2
print(student1.__class__.number) # 打印2

class Student:

    # number属于类变量,不属于某个具体的学生实例
   number = 0    # 定义学生属性,初始化方法
   # name和score属于实例变量
   def __init__(self, name, score):
       self.name = name
       self.score = score
       Student.number = Student.number + 1    # 定义打印学生信息的方法
   def show(self):
       print("Name: {}. Score: {}".format(self.name, self.score))    # 定义类方法,打印学生的数量
   @classmethod
   def total(cls):
       print("Total: {0}".format(cls.number)) # 实例化,创建对象
student1 = Student("John", 100)
student2 = Student("Lucy", 99) Student.total()  # 打印 Total: 2

# 创建一个学生类
class Student:    # 定义学生属性,初始化方法
   # name和score属于实例变量, 其中__score属于私有变量
   def __init__(self, name, score):
       self.name = name
       self.__score = score    # 定义打印学生信息的方法
   def show(self):
       print("Name: {}. Score: {}".format(self.name, self.__score)) # 实例化,创建对象
student1 = Student("John", 100) student1.show()  # 打印 Name: John, Score: 100
student1.__score  # 打印出错,该属性不能从外部访问。

# 创建一个学生类
class Student:    # 定义学生属性,初始化方法
   # name和score属于实例变量, 其中score属于私有变量
   def __init__(self, name, score):
       self.name = name
       self.__score = score    # 利用property装饰器把函数伪装成属性
   @property
   def score(self):
       print("Name: {}. Score: {}".format(self.name, self.__score)) # 实例化,创建对象 student1 = Student("John", 100) student1.score  # 打印 Name: John. Score: 100

# 创建父类学校成员SchoolMember
class SchoolMember:    def __init__(self, name, age):
       self.name = name
       self.age = age    def tell(self):
       # 打印个人信息
       print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ") # 创建子类老师 Teacher
class Teacher(SchoolMember):    def __init__(self, name, age, salary):
       SchoolMember.__init__(self, name, age) # 利用父类进行初始化
       self.salary = salary    # 方法重写
   def tell(self):
       SchoolMember.tell(self)
       print('Salary: {}'.format(self.salary)) # 创建子类学生Student
class Student(SchoolMember):    def __init__(self, name, age, score):
       SchoolMember.__init__(self, name, age)
       self.score = score    def tell(self):
       SchoolMember.tell(self)
       print('score: {}'.format(self.score)) teacher1 = Teacher("John", 44, "$60000")
student1 = Student("Mary", 12, 99) teacher1.tell()  # 打印 Name:"John" Age:"44" Salary: $60000
student1.tell()  # Name:"Mary" Age:"12" score: 99

# 创建子类学生Student
class Student(SchoolMember):    def __init__(self, name, age, score):
       SchoolMember.__init__(self, name, age)
       self.score = score    def tell(self):
       super().tell() # 等同于 SchoolMember.tell(self)
       print('score: {}'.format(self.score))

Python面向对象编程核心思想的更多相关文章

  1. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  2. Python面向对象编程(上)

    Python不仅支持面向过程编程,同时也支持面向对象编程.面向工程就是分析解决问题所需的步骤,然后用函数把这些步骤逐一实现,使用的时候再一个个调用函数就可以.面向对象则是把解决的问题按照一定规则划分为 ...

  3. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  4. 图解python | 面向对象编程

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...

  5. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  6. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  7. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  8. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  9. Python 面向对象编程——访问限制

    <无访问限制的对象> 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.但是,从前面Student类的定义来看(见:Py ...

随机推荐

  1. Linux必知必会--curl

    你有多自律,你就能走多远~ --久节奏.慢读书 Curl命令 学习每个linux命令都该掌握man命令.(可以使用man命令去查看每个命令的使用说明) curl命令是一个利用URL规则在命令行下工作的 ...

  2. 快捷定位目录 z武器

    z的源码在这里:https://github.com/rupa/z/blob/master/z.sh 1.把源码复制到你的用户目录下的z.sh文件, 2.然后用vim打开.bashrc这个目录,在最后 ...

  3. vs code 搭建java maven springboot环境

    Java Extension Pack,Maven for Java,Spring Boot Extension Pack https://blog.csdn.net/qq_26026975/arti ...

  4. php导出表格两种方法 ——PhpExcel的列子

    php常用的导出表格有两种方法,第一种是输出表格,这种方法打开的时候有警告提示,一般导出表格会用phpexcel,这个导出比较灵活,而且还可以设置表格的样式. 第一种导出例子 /** * 执行导出 * ...

  5. 使用eclipse-hadoop插件无法再eclipse操作(上传、删除文件)

    再conf中的hdfs-site.xml添加如下配置: <property><name>dfs.permissions</name><value>fal ...

  6. 讲解Flume

    Spark Streaming通过push模式和pull模式两种模式来集成Flume push模式:Spark Streaming端会启动一个基于Avro Socket Server的Receiver ...

  7. Jenkins拉取github库代码执行构建

    前言 上篇文章写了关于定时构建,以及构建后发送邮件的内容,但是构建时运行的代码是我们手动添加到Jenkins工作空间的.这篇文章我们说一说自动从GitHub远程库拉取代码,执行构建,废话不多说,开始! ...

  8. HDU 2887 Watering Hole(MST + 倍增LCA)

    传送门 总算是做上一道LCA的应用题了... 题意:有$n$个牧场, $m$根管道分别连接编号为$u,v$的牧场花费$p_{i}$,在第$i$个牧场挖口井需要花费$w_{i}$,有$P$根管道直接连通 ...

  9. KMP + BZOJ 4974 [Lydsy1708月赛]字符串大师

    KMP 重点:失配nxtnxtnxt数组 意义:nxt[i]nxt[i]nxt[i]表示在[0,i−1][0,i-1][0,i−1]内最长相同前后缀的长度 图示: 此时nxt[i]=jnxt[i]=j ...

  10. [NPM + React] Prepare a Custom React Hook to be Published as an npm Package

    Before we publish our package, we want to make sure everything is set up correctly. We’ll cover vers ...