一、属性定义
1、类属性
类属性定义在类中且在函数体之外;类属性通常不作为实例属性使用;类变量紧接在类名后面定义
类属性的引用:类名.count eg:Employee.count
实例中可以引用类的属性:
a、通过类名引用
b、通过实例名:读取的操作,写的操作(操作的属性是实例的属性,不是类的属性,对类的属性没有影响)
 
2、实例属性
定义在方法中的变量,只作用于当前实例的类;实例变量在__init__()函数里定义
如果所添加的属性名与类中类属性名相同的时,类属性在这个实例对象中就会被屏蔽掉,也就是说实例引用时,同名的实例属性会屏蔽同名的类属性,就类似于全局变量与局部变量的关系。
 
3、局部变量
在类的实例方法中定义的变量,叫局部变量,其作用域仅限于其所在的函数内部,执行到该函数,局部变量生成,函数退出后,局部变量被消亡。
 
4、@porperty 属性装饰器
使用:
@property
def score(self):
return self.__score
s1=Student('a',18,90)
print s1.score 直接把方法当属性使用
 
@property.setter @score.setter 修饰器 修改
def score(self,score):
pass
 
s1.score=98 修饰器
@property.deleter @score.deleter 删除
eg:
#encoding=utf-8
class Goods(object):
def __init__(self,price):
self.__price=price
@property
def price(self):
print '@porperty'
return self.__price
@price.setter
def price(self,price1):
self.__price=price1
print '@price setter'
@price.deleter
def price(self):
del self.__price
print '@price.deleter'
 
obj=Goods(100)
print obj.price
obj.price=123
del obj.price
 
5、类的私有属性
两个下划线开头属性,声明该属性为私有属性,不能在类的外部被使用或直接访问,只能在类内部访问。在类内部的方法中使用时的语法:self.__private_attrs。 eg:self.__name
eg:
class Person(object):
__secretCount = 0 #私有属性
def __init__(self, name):
self.name = name #实例属性
self.__inName = 'ads' #私有属性
def visit_private_attribute( self ):
self.__secretCount += 1
print "__secretCount: ", self.__secretCount
print u"__inName:", self.__inName
p = Person("prel")
p.visit_private_attribute() 通过方法获取类的私有属性
print u"在类外直接通过实例访问私有属性"
print p.__inName 在类外直接调用,会报错
 
python的语法并不是那么严格的能够保证私有变量不被随意改动,以下方式可以访问私有属性:
object._className__attrName eg:p._Person__inName
 
二、属性相关
1、修改类属性
修改类属性的值,有三种方法,分别为:
(1)通过类方法修改
(2)通过实例方法修改
(3)直接通过类对象修改
#coding=utf-8
class employee(object) :
city = 'BJ' #类属性
def __init__(self, name) :
self.name = name #实例变量
#定义类方法
@classmethod
def getCity(cls) :
return cls.city
#定义类方法
@classmethod
def setCity(cls, city) :
cls.city = city
#实例方法
def set_City(self, city) :
employee.city = city
 
调用:
emp = employee('joy') #创建类的实例
print emp.getCity() #通过实例对象引用类方法
print employee.getCity()#通过类对象引用类方法
emp.setCity('TJ')#实例对象调用类方法改变类属性的值
print emp.getCity()
print employee.getCity()
employee.setCity('CD')#类对象调用类方法改变类属性的值
print emp.getCity()
print employee.getCity()
emp.set_City('SH')#调用实例方法修改类属性的值
print emp.getCity()
print employee.getCity()
employee.city = 20 #直接修改类属性的值
print emp.getCity()
print employee.getCity()
 
2、作用域
print locals() 返回所有的局部变量
print globals() 返回所有的全局变量
在python的作用域规则里面,创建变量时一定会在当前作用域里创建同样的变量,但访问或修改变量时,会在当前作用域中查找该变量,如果没找到匹配的变量,就会依次向上在闭合作用域中进行查找,所以在函数中直接访问全局变量也是可以的

Python之面向对象:属性的更多相关文章

  1. python day20面向对象-属性,类方法,静态方法

    一.属性的初识 # class Person: # # def __init__(self,name,hight,weight): # self.name = name # self.__hight ...

  2. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  3. Python中的属性管理

    Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...

  4. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  5. Python的面向对象2

    我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...

  6. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  7. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  8. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

  9. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  10. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

随机推荐

  1. java程序换图标

    ImageIcon img = new ImageIcon("D:\\mahou-in-action\\ShiJuanFenXi\\src\\zoom-in.png"); inst ...

  2. IPython安装过程 @win7 64bit

    http://www.360doc.com/content/14/0902/11/16740871_406476389.shtml 为了测验测验一下IPython的应用,今天折腾了好久的从安装包msi ...

  3. C# StreamReader对象

    1.读取文件 输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台.StreamRead ...

  4. facebook的infer检测工具的安装

    缘由 由于公司产出代码的时候会使用静态扫描工具检测代码的质量,所以自己就想动手尝试一番infer整个的使用方式和使用效果,便动手安装了infer,结果安装过程中遇见太多的坑,导致很多时候都安装失败,这 ...

  5. react的constructor和super的具体含义和使用

    1.constructor( )-----super( )的基本含义 这是ES6对类的默认方法,通过 new 命令生成对象实例时自动调用该方法.并且,该方法是类中必须有的,如果没有显示定义,则会默认添 ...

  6. ABAP读取长文本的方法

    SAP中所有的项目文本都存在以下两张数据表中: 1. STXH  抬头项目文本 透明表 2. STXL  明细项目文本   透明表 长文本读取方法 首先在STXH和STXL中根据OBJECT NAME ...

  7. selinux详解及配置文件

    selinux详解 selinux 的全称是Security Enhance Linux,就是安全加强的Linux.在Selinux之前root账号能够任意的访问所有文档和服务 : 如果某个文件设为7 ...

  8. C语言分步编译

    在进行C语言源码至可执行程序的整个过程中,整个形成过程可以分为四步: 1.预处理 gcc -E hello.c -o hello.i 目的: (1)宏定义展开 (2)头文件展开 (3)条件编译 (4) ...

  9. Python中的bytes

    bytes_lst = [ ('创建bytes',), ('bytes可哈希',), ('编码与解码',), ('常见编码类型',), ('ord() 与 chr()',), ] 创建bytes &g ...

  10. django实现事务

    1.导入模块 from django.db import transaction 2.使用方法 with transaction.atomic(): User.objects.create(name= ...