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 ...
随机推荐
- Android实现播放器功能
package com.example.yzj.android_7_27; import android.content.ContentResolver;import android.content. ...
- 工业串口和网络软件通讯平台(SuperIO 2.0)发布
下载:SuperIO 2.0(开发手册.Demo.组件包) 官网:进入 交流群:54256083 SuperIO 2.0版本正式发布.把SCL正式更改名称为SuperIO. 一.此次升级主要包括两个方 ...
- Atitit.提升 升级类库框架后的api代码兼容性设计指南
Atitit.提升 升级类库框架后的api代码兼容性设计指南 1. 增加api直接增加,版本号在注释上面增加1 2. 废弃api,使用主见@dep1 3. 修改api,1 4. 修改依赖import, ...
- JavaWeb之CSS详解
CSS的简介 1.CSS概述及作用 CSS:Cascading Style Sheets)是层叠样式表用来定义网页的显示效果.可以解决html代码对样式定义的重复,提高了后期样式代码的可维护性,并增强 ...
- JS全屏漂浮广告、移入光标停止移动
点击这里查看效果 以下是代码: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Ty ...
- javascript 函数初探 (四)--- 回调函数
回调函数 既然函数与任何被赋值给变量的数据是相同的,那么她当然可以像其他数据那样被定义.删除.拷贝,以及当成参数传递给其它函数. 我们定义一个函数,这个函数有两个函数类型的参数,然后他会分别执行这两个 ...
- JavaScript小细节点罗列
共勉! 属性访问表达式 众所周知,JavaScript为属性的访问定义了两种语法方式: 表达式.标识符 // 表达式(指定对象) 标识符(指定需要访问的属性的名称) 表达式[表达式] //表达式1(指 ...
- 数组Array,集合List与字符串String,整形int的get类方法。
比如 public static List<DownCountCmd> getDownCountCmdList() { return downCount; } List<DownCo ...
- php 与 java 生成时间戳的区别
最近服务器有java却换到php环境,生成的时间戳转换成时间格式的出现异常,查询资料得知: PHP 的 time() 函数返回的结果是 Unix 时间戳,值的单位是秒:如:1463564861 Jav ...
- B样条曲线曲面(附代码)
1 B样条曲线 1.1 B样条曲线方程 B样条方法具有表示与设计自由型曲线曲面的强大功能,是形状数学描述的主流方法之一,另外B样条方法是目前工业产品几何定义国际标准——有理B样条方法 (NURBS)的 ...