原文地址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))

最新文章

  1. C语言(函数)学习之index、rindex
  2. Struts2零配置介绍(约定访问)
  3. MVC中使用RazorPDF创建PDF
  4. 爬虫再探实战(四)———爬取动态加载页面——请求json
  5. 用IKVMC将jar转成dll供c#调用
  6. redis终于有比较大的进展了,redis3.0.1 稳定版本发布,支持集群。
  7. ASP.NET 3.5路由总结篇
  8. IWorkspaceFactory接口
  9. ssh密码
  10. Zabbix 3.0的前端默认在Centos 6上不支持
  11. 关于数据分析的4点心得:维度、指标、KPI
  12. log4j.properties配置说明
  13. Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复
  14. pl sql 中文乱码
  15. linux以16进制查看文件
  16. 为什么我们要使用HTTP Strict Transport Security?
  17. SHELL调用存储过程
  18. Django商城项目笔记No.1项目准备工作
  19. 20145202马超 2016-2017-2 《Java程序设计》第6周学习总结
  20. (2)基本工作流(制作场景与UI)

热门文章

  1. 介绍一个免费的云开发工具:Cloud Shell
  2. 【OGG】OGG的单向复制配置-支持DDL(二)
  3. Docker以https访问Harbor私有仓库(二)
  4. 查看zookeeper版本
  5. manjaro中微信不能输入中文及微信窗口出现透明轮廓的问题
  6. Python语言防坑小技巧
  7. JAVA的概念理解:JavaSE、JavaEE、JavaME、jdk、jre、ide
  8. 学习app开发思路
  9. Docker创建mysql镜像
  10. linux sed 批量替换文件中的字符串或符号