python笔记之类
类
python不直接支持私有方式,可以在方法或者属性之前加上双下划线,将其变为私有,即外部无法直接调用
访问私有方法或者属性,方法是: _<类名><变量名>
首先类定义
# -*- coding: UTF-8 -*-
#!/usr/bin/python
#__metaclass__ = type
class Person:
#self是对象自身的引用,将name值放在自己的命名空间中
def setName(self, name):
self.name = name
def getName(self):
print self.name
return self.name
class NewPerson(object):
def setNewName(self, name):
self.__name = name
def __getName(self):
print self.__name
return self.__name
class Student(Person):
def sayHello(self):
print "hello, my name is " + self.name
#多继承
class LazyBoy(NewPerson, Student):
pass
练习
shoren = Person() #初始化对象
shoren.setName("shoren's name ... ") #设置
shoren.getName()
print shoren.name #直接调取用户名
#方法也可以当做一个变量,是可以随意绑定的
getMyName = shoren.getName
getMyName()
np = NewPerson();
np.setNewName("new name")
try:
print np.__name #不能直接访问私有变量
except Exception, e:
print e
try:
print np.__getName #不能直接调用私有方法
except Exception, e:
print e
print np._NewPerson__name #使用 _<类名><变量名> 访问私有变量
np._NewPerson__getName()
stu = Student();
stu.setName("踏岚")
stu.sayHello()
lb = LazyBoy();
lb.name = "lazy boy"
lb.sayHello()
结果:
shoren's name ...
shoren's name ...
shoren's name ...
'NewPerson' object has no attribute '__name'
'NewPerson' object has no attribute '__getName'
new name
new name
hello, my name is 踏岚
hello, my name is lazy boy
可用的方法:
- isinstance(object, class) 对象是否是类的实例
- issubclass(A, B) A是否为B的子类
- hasattr(object, name) 对象是否有给定的属性
- getattr(object, name[, default]) 获取属性的值,可以提供默认值
- setattr(object, name, value) 设置对象属性值
- type(object) 返回对象类型 [使用__metaclass__=type 或从object继承的类,可以使用此方法查看类型]
#相关函数练习
print isinstance(stu, Student)
print issubclass(Student, Person)
print hasattr(stu, "name")
print hasattr(stu, "getName")
print dir(np)
print NewPerson.__base__
print dir(stu)
print stu.__class__
print type(stu)
print type(np)
结果:
True
True
True
True
['_NewPerson__getName', '_NewPerson__name', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'setNewName']
<type 'object'>
['__doc__', '__module__', 'getName', 'name', 'sayHello', 'setName']
__main__.Student
<type 'instance'>
<class '__main__.NewPerson'>
由上,NewPerson继承至object,所以含有更多的属性,且使用type()得到正确的值。如果在文件中加入__metaclass__ = type,则stu.class 和type(stu)值均为 <class 'main.Student'>
python笔记之类的更多相关文章
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
- python笔记 - day7
python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...
- python笔记 - day6
python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...
随机推荐
- hihoCoder1310 岛屿 (dfs)
思路:首先dfs求得所有联通块,再搜索的同时把每个联通块的坐标都保存下来,然后把每个联通块处理一下–首先得到某个联通块的最小横坐标和纵坐标,然后让每个坐标去减去这个横坐标和纵坐标.相当于使得所有联通块 ...
- 使用stringstream对象简化类型转换
< sstream>库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一个对应的宽 ...
- UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...
- 常用u-boot命令详解(全) 2
(8) USB 操作指令 指令 功能 usb reset 初始化USB控制器 usb stop [f] 关闭USB控制器 usb tree 已连接的USB设备树 usb info [dev] 显示US ...
- 嵌入式 视频编码(H264)
这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用 摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...
- PHP_保留两位小数并且四舍五入_保留两位小数并且不四舍五入
php保留两位小数并且四舍五入 $num = 123213.666666; echo sprintf("%.2f", $num); php保留两位小数并且不四舍五入 php进一法取 ...
- iframe父页面获取子页面的参数
1.父页面中的iframe <iframe name="parentPage"></iframe> 2.子页面中元素的属性 <input type=& ...
- Java获取当前的年月
今天,我在尝试从数据库取数据的过程中,发现页面初始化时需要给时间控件赋初值.于是,我就写了一个获取当前年月的时间工具类. 1.具体源码如下: YearAndMonth.java: /** * @Tit ...
- Java Web项目中缺少Java EE 6 Libraries怎么添加
Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...
- 多线程下不重复读取SQL Server 表的数据
在进行一些如发送短信.邮件的业务时,我们经常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送,发送完成后再将数据转移到历史表中,这样保证待发送表的数据一般情况下不会太 ...