python 类属性与方法
Python 类属性与方法
标签(空格分隔): Python
Python的访问限制
Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外部访问。
class Person:
def __init__(self, name, age, sex):
self.name = name
self._age = age
self.__sex = sex
def out_name(self):
print self.name
def _out_age(self):
print self._age
def __out_sex(self):
print self.__sex
xiaohong = Person('xiaohong', 20, 1)
print 'name'
xiaohong.out_name()
print xiaohong.name
print 'age'
xiaohong._out_age()
print xiaohong._age
print 'sex'
# 以下两句报错
xiaohong.__out_sex() # AttributeError: Person instance has no attribute '__outSex'
xiaohong.__sex # AttributeError: Person instance has no attribute '__sex'
可以看到,以双下划线开头的变量无法在类外被访问。
当然以单下划线开头的变量能够被外界访问,然而在一般规范中,将正常变量作为类变量,将单下划线开头的变量作为实例变量。
类变量与实例变量
类变量就是在类的实例之间能够共享变量值的变量,实例变量就是该实例具有的变量。也就说,实例变量每个实例各自拥有,互相独立,而类变量有且只有一份。
具体可以参见:
# coding=utf-8
class aa:
# w就是一个类变量,为该类的实例对象所共有,需要在定义时就进行赋值
w = 10
def __init__(self):
self._x = 11
self._y = 12
def add(self):
return self._x + self._y
a = aa()
print a.add()
# 改变类变量的值
aa.w = 20
# 设置实例中实例变量的值,将覆盖类变量的值
a.w = 13
print aa.w, a.w # 输出20 13
del a.w
print a.w # 输出20
# 设置实例变量
a._t = 14
a._q = 15
print a._t, a._q # 输出14 15
# 设置类变量,该类的所有实例对象共有
aa.m = 30
aa.n = 40
print aa.m, aa.n # 输出30 40
b = aa()
print b._x,b._y
# print b._t,b._q # 该句报错,因为b对象没有属性t,q
print b.m,b.n # 25.26行设置了类变量m,n,输出30 40
print b.w # 在14行已经改变了w的值,输出20
实例方法与类方法
和属性变量一样,方法也分为实例方法与类方法。
在class内部定义的全部是实例方法,实例方法的第一个参数是self代表的是实例本身。
要在class中定义类方法,需要使用@classmethod修饰说明,参数也不在是self,而是cls.
class Person:
__count = 0
def __init__(self, name):
self._name = name
Person.__count += 1
@classmethod
def how_many(cls):
return cls.__count
print Person.how_many() # 输出 0
p1 = Person('Bob')
print Person.how_many() # 输出1
python 类属性与方法的更多相关文章
- Python 类属性和方法
import types class Dog(object): __slots__ = ("name", "color", "info") ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- python从入门到大神---1、初始化实例、类属性、方法
python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...
- python干货-类属性和方法,类的方法重写
类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来 ...
- python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...
- python类属性用法总结
属性的定义:python中的属性其实是普通方法的衍生. 操作类属性有三种方法: 1.使用@property装饰器操作类属性. 2.使用类或实例直接操作类属性(例如:obj.name,obj.age=1 ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- Python学习笔记之面向对象编程(三)Python类的魔术方法
python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...
- Python类属性和类方法
01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __in ...
随机推荐
- Java基本概念(1)什么是Java
什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:Java都有那些版本 ...
- php中防止SQL注入的方法
[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...
- C# Async/Await
前言 前几天去一个公司面试,被问到 Async/Await,之前只知道有这么个东西,没有深入了解过就没有答上来.今天没啥事情,就查了下资料. 同步编程,异步编程概念 通常情况下,我们写的程 ...
- form表单提交和ajax表单提交,关于移动端如何通过软键盘上的【搜索】和【前进】进行提交操作
[文章来源]由于自己对于form研究甚少,所以一直用的都是AJAX进行提交,这次后台提出要用form提交,顺便深入研究一下:之前在做表单的时候,发现input可以通过设置不同的type属性,调用不同的 ...
- 鼠标悬停显示CSS3动画边框
效果体验:http://keleyi.com/keleyi/phtml/css3/14.htm 以下是代码: <!DOCTYPE html> <html xmlns="ht ...
- 有一个小效果而引出的appendTo()函数。
在公司做项目的时候,始终不了解信息逐条向上滚的动画效果,后来查阅相关资料,终于明白了,在这个过程中,让我对appendTo这个函数有了一个全新的认识.话不多说,首先是demo: <!DOCTYP ...
- 安装Portal for ArcGIS时如何正确配置HTTPS证书
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为 ...
- MDM证书申请的流程
MDM证书申请的流程 整个流程分为两部分:vendor,customer. 一.Vendor 1.成为一个 MDM Vendor 1) 首先你需要拥有一个 Apple Enterprise accou ...
- addEventListener和attachEvent的区别
addEventListener共有3个参数,如下所示:element.addEventListener(type,listener,useCapture); 参数 参数说明 element 要绑定事 ...
- iOS团队风格的统一
不知不觉团队已经有了4个iOS开发,大家的代码风格完全不一样,所以每次改起别人的代码就头疼,理解起来不是那么顺畅,如鲠在喉.所以,就开了场分享会,把一些基本调用方法和代码风格统一了一下. 前言 主要参 ...