一、属性定义
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编程基础——栈压入和弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  2. Mac 系统 + Chrome浏览器 网页前端出现中文文字反转或顺序错乱

    问题背景 React开发的系统,收到一个BUG反馈,*"号个人统计"文字不正确,应为"个人号统计"*. 收到BUG后,打开浏览器查验是什么情况,难道犯了最基本的 ...

  3. 操作系统(4)_进程同步_李善平ppt

    生产者进程count++是它的临界区,消费者count--是它的临界区. 经典同步问题,死锁问题,略.

  4. GreenPlum查看表和数据库大小

    表大小 zwcdb=# select pg_size_pretty(pg_relation_size('gp_test')); pg_size_pretty ---------------- 1761 ...

  5. JS起源

    一.初始JavaScript Mosaic是互联网历史上第一个普遍使用和显示图片的浏览器1993年问世. 后来由于商标权转让,原本的开发团队又开发了Netscape Navigetor网景浏览器,也是 ...

  6. vue入门之vue-cli安装项目

    第一步先安装nmp 在node.js的官网下载即可. 第二步 直接安装刚下载好的node.js即可,(这里建议不要修改node.js的安装路径),傻瓜式直接下一步即可 检测是否安装成功: 在cmd的控 ...

  7. Python基础-Python注释

    一.什么是注释.特性 1.一段文字性的描述,通过注释,可以解释和明确Python代码的功能,并记录将来要修改的地方. 2.当程序处理时,Python解释器会自动忽略,不会被当做代码进行处理 二.注释的 ...

  8. 对比传统方式访问数据库和SpringData访问数据库

    我们在写代码的时候应该一边写一边测试,这样的话可以尽快的找到错误,在代码写多了之后去找错误的话不容易给错误定位 传统方式访问数据库 1:创建一个Maven web项目 2:修改pom.xml为以下内容 ...

  9. go包的理解

    结论: import时指定的字符串,是相对于$GOPATH的目录路径,告诉了go,要去加载这个目录下所有的包文件(不包括子目录中的文件) 一个目录中所有的源文件(不包括子目录)代表了单独的一个包,这些 ...

  10. Spring中注解大全和应用

    @Controller@RestController:@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable@C ...