Python3面向对象编程实例
/*认真研究完这个实例,理解python面向对象编程的方法*/
class Person:
"""人员信息"""
# 姓名(共有属性)
name = ''
# 年龄(共有属性)
age = 0 #定义构造函数
def __init__(self, name='', age=0):
self.name = name
self.age = age # 重载专有方法: __str__
def __str__(self):
return "这里重载了 __str__ 专有方法, " + str({'name': self.name, 'age': self.age}) def set_age(self, age):
self.age = age class Account:
"""账户信息"""
# 账户余额(私有属性)
__balance = 0
# 所有账户总额
__total_balance = 0 # 获取账户余额
# self 必须是方法的第一个参数
def balance(self):
return self.__balance '''一共有三种方式定义类的方法
第一种:不加修饰,绑定的是当前的实例
增加账户余额'''
def balance_add(self, cost):
# self 访问的是本实例
self.__balance += cost
# self.__class__ 可以访问类
self.__class__.__total_balance += cost '''
第二种:用@classmethod来修饰,绑定的是类
类方法(用@classmethod标识,第一个参数为 cls)
'''
@classmethod
def total_balance(cls):
return cls.__total_balance '''
第二种:用@staticmethod修饰,不绑定
静态方法(用 @staticmethod 标识,不需要类参数或实例参数)
'''
@staticmethod
def exchange(a, b):
return b, a class Teacher(Person, Account):
"""教师"""
# 班级名称,受保护的属性
_class_name = '' def __init__(self, name):
# 第一种重载父类__init__()构造方法
# super(子类,self).__init__(参数1,参数2,....)
super(Teacher, self).__init__(name) @classmethod
def set_class_name(cls,class_name):
cls._class_name = class_name def get_info(self):
# 以字典的形式返回个人信息
return {
'name': self.name, # 此处访问的是父类Person的属性值
'age': self.age,
'class_name': self._class_name,
'balance': self.balance(), # 此处调用的是子类重载过的方法
} # 方法重载
def balance(self):
# Account.__balance 为私有属性,子类无法访问,所以父类提供方法进行访问
return Account.balance(self) * 1.1 class Student(Person, Account):
"""学生"""
_teacher_name = '' def __init__(self, name, age=18):
# 第二种重载父类__init__()构造方法
# 父类名称.__init__(self,参数1,参数2,...)
Person.__init__(self, name, age) @classmethod
def set_teacher_name(cls,teacher_name):
cls._teacher_name = teacher_name def get_info(self):
# 以字典的形式返回个人信息
return {
'name': self.name, # 此处访问的是父类Person的属性值
'age': self.age,
'teacher_name': self._teacher_name,
'balance': self.balance(),
} # 教师 John
john = Teacher('John')
john.set_class_name('CS2018')
john.balance_add(20)
john.set_age(36) # 子类的实例可以直接调用父类的方法
print("John's info:", john.get_info()) # 学生 Mary
mary = Student('Mary', 18)
mary.balance_add(18)
mary.set_teacher_name('john')
print("Mary's info:", mary.get_info()) # 学生 Fake
fake = Student('Fake')
fake.balance_add(30)
print("Fake's info", fake.get_info()) # 三种不同的方式调用静态方法
print("john.exchange('a', 'b'):", john.exchange('a', 'b'))
print('Teacher.exchange(1, 2)', Teacher.exchange(1, 2))
print('Account.exchange(10, 20):', Account.exchange(10, 20)) # 类方法、类属性
print('Account.total_balance():', Account.total_balance())
print('Teacher.total_balance():', Teacher.total_balance())
print('Student.total_balance():', Student.total_balance()) # 重载专有方法
print(john)
print(mary)
print(fake)
输出:
John's info: {'name': 'John', 'age': 36, 'balance': 22.0, 'class_name': 'CS2018'}
Mary's info: {'teacher_name': 'john', 'name': 'Mary', 'age': 18, 'balance': 18}
Fake's info {'teacher_name': 'john', 'name': 'Fake', 'age': 18, 'balance': 30}
john.exchange('a', 'b'): ('b', 'a')
Teacher.exchange(1, 2) (2, 1)
Account.exchange(10, 20): (20, 10)
Account.total_balance(): 0
Teacher.total_balance(): 20
Student.total_balance(): 48
这里重载了 __str__ 专有方法, {'name': 'John', 'age': 36}
这里重载了 __str__ 专有方法, {'name': 'Mary', 'age': 18}
这里重载了 __str__ 专有方法, {'name': 'Fake', 'age': 18}
Python3面向对象编程实例的更多相关文章
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python面向对象编程实例解析
1. 类和函数 面向对象编程的例子: #!/usr/bin/env python # -*- coding: utf-8 -*- class Person(object): #在属性和变量的前面增加“ ...
- 大数据笔记(二十四)——Scala面向对象编程实例
===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...
- Python3 面向对象编程
小案例: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:Bert import sys class Role(object): n=&qu ...
- php 面向对象编程实例 __construct 和 __destruct 区别
大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方 法.构 造函数的声明与其它操作的声明一样,只是其名称必须是_ ...
- python3 面向对象编程--类的封装和继承
#python3import refrom urllib import requestimport os class PosterSpider(object): def __init__(se ...
- Python3 面向对象编程高级语法
1.静态方法: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi class Dog(object): def __init ...
- javascript 仿面向对象编程实例代码(私有,公共变量。。。)
//定义一个javascript类 function JsClass(privateParam,publicParam){//构造函数 var priMember = privateParam; // ...
- python面向对象编程实例
1.编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生 class Student: """学生类""" c ...
随机推荐
- acwing 528. 奶酪 解题记录
习题地址 https://www.acwing.com/problem/content/description/530/ 现有一块大奶酪,它的高度为h,它的长度和宽度我们可以认为是无限大的,奶酪中间有 ...
- 14.web4
右键查看源代码 先进行URL解码 解码之后可以得到一串 js 代码, 具体逻辑大概就是 var p1 = "67d709b2b"var p2 = "aa648cf6e87 ...
- 阿里云服务器 ECS Jenkins 安装教程
参考:https://blog.csdn.net/liqing0013/article/details/83930419
- 【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第25章 STM32H7的TCM,SRAM等五块内 ...
- Android Monkey的用法(一)
Monkey 简介 ü Monkey 是一个命令行工具,可以运行在 Android 模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入 ...
- 1+x证书Web前端开发HTML+CSS专项练习测试题(八)
1+x证书Web前端开发HTML+CSS专项练习测试题(八) 官方QQ群 1+x 证书 Web 前端开发 HTML+CSS 专项练习测试题(八) http://blog.zh66.club/index ...
- IT兄弟连 HTML5教程 HTML5技术的应用现状及HTML5平台的兴起
HTML5的优良特性很快被各种类型的网站利用,比如文件拖拽到网页上传功能,多数即使用HTML5提供的新属性就可以完成,来实现素材的免插件拖放.因此,HTML5技术实际上在国内已经获得了较广泛的应用与支 ...
- H3C DRNI学习
DRNI:Distributed Resilient Network Interconnect,分布式弹性网络互连.DR:分布式聚合接口IPP:内部控制链路端口IPL:内部控制链路DRCP报文:分布式 ...
- Django多进程滚动日志的问题
使用RotatingFileHandler控制日志文件的大小 # settings.py LOGGING = { ... 'handlers': { ... 'file': { 'level': 'I ...
- 获取Excel工作薄中Sheet页(工作表)名集合
#region 获取Excel工作薄中Sheet页(工作表)名集合 02./// <summary> 03./// 获取Excel工作薄中Sheet页(工作表)名集合 04./// < ...