Python对象属性自动更新操作示例

日期: 2019-12-15 03:18 浏览次数 :

有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象属性或方法

python 对象的属性 进入正题,来看一个实例来了解python中类,对象中公有属性,私有属性及局部变量,全局变量的区别.

本文实例讲述了Python对象属性自动更新操作。分享给大家供大家参考,具体如下:

1、eval

root@10.1.6.200:~# cat object.py 


#!/usr/bin/env python
#coding:utf8

class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2

  def fun(self):
    self.var2 = "object public atrribute var2" #对象的公有属性var2
    self.__var3 = "object self atrribute __var3" #对象的私有属性__var3
    var4 = "Function of the local variable var4" #函数fun的局部变量

  def other(self):
    print self.__var3

在软件设计中会遇到这样的问题:有些属性之间有相互关联。这样,其中的一个属性变化的时候其他的属性也应该跟随变化。

In [634]: def getmethod(x,char='just for test'):
  ...:  return eval('str.%s' % x)(char)
  ...: 


In [635]: getmethod('upper')
Out[635]: 'JUST FOR TEST'

根据上面代码后面加入以下代码可以实例化一个对象及获取类公有属性.

先看一段示例代码:

2、getattr

he = Dave()    #实例化一个对象he
print he.var1   #从实例中获取类的公有属性
print Dave.var1  #直接从类中获取公有属性



root@10.1.6.200:~# ./object.py 


class atribute,public atrribute var1
class atribute,public atrribute var1
# -*- coding:utf-8 -*-
#!python3
class DemoClss:
  def __init__(self,val1,val2):
    self.val1= val1
    self.val2= val2
    self.sum= self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum)
obj.val1 = 321
print(obj.sum)
In [650]: def getmethod2(x, char='just for test'):
  ...:  return getattr(char, x)()
  ...: 


In [651]: getmethod2('upper')
Out[651]: 'JUST FOR TEST'

类的私有属性不能被类或对象直接调用

代码的执行结果如下:

3、利用内置库operator

he = Dave()
print Dave.__var2
print he.__var2



root@10.1.6.200:~# ./object.py 


Traceback (most recent call last):
 File "./object.py", line 19, in <module>
  print Dave.__var2
AttributeError: class Dave has no attribute '__var2'

图片 1

In [648]: def getmethod3(x, char='just for test'):
  ...:  return operator.methodcaller(x, char)(str)
  ...: 


In [649]: getmethod3('upper')
Out[649]: 'JUST FOR TEST'

但可以通过方法间接调用.

两个结果一致!其实,这种类似的设计中我们大多时候是希望有一个sum属性跟随者两个数值能够自动变化。但是,上面的这种方式显然是不行的,因为这种设计的生效只能够是在初始化的时候生效。

以上这篇python 通过字符串调用对象属性或方法的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

class Dave():
  var1 = "class atribute,public atrribute var1" #类属性,公有属性var1
  __var2 = "class self atribute __var2"  #类的私有属性__var2

  def other(self):
    print Dave.__var2   

he = Dave()
he.other()



root@10.1.6.200:~# ./object.py 


class self atribute __var2

那么,如果想要实现一个随时求和的方法我们该怎么做呢?其实,我们可以通过方法来实现!代码的改进如下:

您可能感兴趣的文章:

  • Python中动态获取对象的属性和方法的教程
  • Python深入学习之对象的属性
  • 全面了解python中的类,对象,方法,属性
  • 在python的类中动态添加属性与生成对象
  • python创建只读属性对象的方法(ReadOnlyObject)
  • python 打印出所有的对象/模块的属性(实例代码)
  • 举例讲解Python面相对象编程中对象的属性与类的方法
  • Python检测一个对象是否为字符串类的方法
  • Python中获取对象信息的方法
  • Python中的对象,方法,类,实例,函数用法分析
  • Python对象属性自动更新操作示例

获取类方法中的对象的公有属性,需要先通过对象执行类中的方法.并通过对象调用该属性.

# -*- coding:utf-8 -*-
#!python3
class DemoClss:
  def __init__(self,val1,val2):
    self.val1= val1
    self.val2= val2
  def sum(self):
    return self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum())
obj.val1 = 321
print(obj.sum())
he = Dave()
liu = Dave()
he.fun()
print he.var2
print liu.var2



root@10.1.6.200:~# ./object.py 


object public atrribute var2
Traceback (most recent call last):        #对象liu由于没有调用fun方法所有就没有该属性.
File "./object.py", line 20, in <module>
  print liu.var2
AttributeError: Dave instance has no attribute 'var2'

程序的执行结果如下:

对象的私有属性和类的私有属性类似,也不能被类或对象直接调用

图片 2