Python类
在类的变量前面加 _ _ 是私有变量,外部不可访问。
需要注意的是,在Python中,变量名类似__xxx__
的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__
、__score__
这样的变量名。
# coding=utf8 class Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score)) bart = Student('Bart Simpson', 98) print(bart.__name)
示例二:
# coding=utf8 class Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score)) # 让外部获取name和score def get_name(self): return self.__name def get_score(self): return self.__score # 设置分数 def set_score(self, score): if 0 <= score <= 100: self.__score = score else: raise ValueError('bad score') bart = Student('Bart Simpson', 98) print(bart.get_name()) print(bart.get_score()) bart.set_score(80) print(bart.get_score()) # print(bart.set_score('str'))
Python内置的@property装饰器就是负责把一个方法变成属性调用的
# coding=utf8 class Student(object): @property def birth(self): return self._bith @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth s = Student() s.birth = 1980 print(s.age)
多重继承
# coding=utf8 class Animal(object): pass # 大类 class Mammal(Animal): pass class Bird(Animal): pass # 各种功能 class Runnable(object): def run(self): print('Running...') class Flyable(object): def fly(self): print('Flying...') # 各种动物 class Dog(Mammal, Runnable): pass class Bat(Mammal, Flyable): pass class Parrot(Bird, Flyable): pass class Ostrich(Bird, Runnable): pass
定制类
# coding=utf8 class Student(object): def __init__(self, name): self.name = name def __str__(self): return 'Student object (name: %s)' % self.name print(Student('Michael')) 另一个实例: # coding=utf8 class Student(object): def __init__(self): self.name = 'Michael' def __getattr__(self, attr): if attr == 'score': return 99 raise AttributeError('\'Student\' object has no attribute \'%s\'' % attr) s = Student() print(s.name) print(s.score)
直接对实例进行调用
# coding=utf8 # 直接对实例进行调用 class Student(object): def __init__(self, name): self.name = name def __call__(self): print('My name is %s.' % self.name) s = Student('Michael') s()
枚举类
# coding=utf8 from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) for name, member in Month.__members__.items(): print(name, '=>', member, ',', member.value)
结果:
Python类的更多相关文章
- Python类中super()和__init__()的关系
Python类中super()和__init__()的关系 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(sel ...
- LightMysql:为方便操作MySQL而封装的Python类
原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- python 类以及单例模式
python 也有面向对象的思想,则一切皆对象 python 中定义一个类: class student: count = 0 books = [] def __init__(self ...
- Python类的特点 (1):构造函数与方法
Python中,类的特点: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) def __init__(self): print ...
- Python类属性,实例属性
1.Python类数据属性:定义在类里面但在函数外面的变量,它们都是静态的. #一段很简单的代码,但反应了很多 >>> class A(): a=1 #一个类里面有个属性a > ...
- python类及其方法
python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...
- python类的定义和使用
python中类的声明使用关键词class,可以提供一个可选的父类或者说基类,如果没有合适的基类,那就用object作为基类. 定义格式: class 类名(object): "类的说明文档 ...
- Python类的探讨
我们下面的探讨基于Python3,我实际测试使用的是Python3.2,Python3与Python2在类函数的类型上做了改变 1,类定义语法 Python类定义以关键字class开头,一个类定义例 ...
- python - 类成员修饰符
在java,c#类的成员修饰符包括,公有.私有.程序集可用的.受保护的. 对于python来说,只有两个成员修饰符:公有成员,私有成员 成员修饰符是来修饰谁呢?当然是修饰成员了.那么python类的成 ...
随机推荐
- 连接Oracle的帮助类
package util; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedState ...
- 搭建angular前端框架 命令
首先必备的工具都下下好. 然后现在开始输入命令行创建angular 项目 1.node cd .. 2.yo bower grunt 3.npm install -g generator-angula ...
- Windows服务的手动添加和删除方法
Windows服务的手动添加和删除方法 服务,是指执行指定系统功能的程序.例程或进程,以便支持其他程序,尤其是低层(接近硬件)程序.其实,服务就是一种特殊的应用程序,它从服务启动开始就一直处于运行状态 ...
- Android(Xamarin)之旅(一)
Xamarin废话我就不多说了. 就是一款编写Android和IOS应用的IDE,从Visual Studio2010就开始有个这个插件.只要发展什么的,我觉得在这里说还不如自己去百度呢. 入正题: ...
- CCF 201612-2 火车购票 (暴力)
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...
- lvs DR模式
1.单机 director端ifconfig eth0:1 $vip broadcast $vip netmask 255.255.255.255 up ----broadcast广播(单机的时候加这 ...
- 20151009 C# 第一篇 程序编写规范
20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过 ...
- Divide Two Integers leetcode
题目:Divide Two Integers Divide two integers without using multiplication, division and mod operator. ...
- ubuntu 14.04 键盘快捷键显示
安装完ubuntu14.04后 第一次登陆,会弹出键盘快捷键的一个大体预览, 也没有一个关闭按钮, 没看完就自动消失了. 让其重现的方法: 按住 super键 ,也就是键盘上的 win键 . 键盘 ...
- 解决VS2010链接错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
网上有多种解决办法,我用最懒的一种,系统是Win7 X86,方法如下: C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe C:\Prog ...