查看: 1100|回复: 0

[Java语言] Python基础教程之面向对象编程如何获取对象信息和属性

发表于 2018-7-13 18:19:27
  今天扣丁学堂小编给大家整理了一篇关于Python基础教程http://www.codingke.com/python/之面向对象编程如何获取对象信息和属性的详细介绍,下面我们来一下吧。
u=916637560,4147286396&fm=27&gp=0.jpg
  使用type()

  使用type(xxx)函数可以判断基本数据类型和自定义数据类型:

  >>>a=10

  >>>type(a)

  <class'int'>

  >>>type(int)

  <class'type'>

  >>>type(dog)

  <class'__main__.Dog'>

  >>>type(fun)

  <class'function'>

  使用types模块

  >>>deff():

  pass

  >>>type(f)

  <class'function'>

  >>>importtypes

  >>>type(f)==types.FunctionType

  True

  >>>type(forninrange(10))

  SyntaxError:invalidsyntax

  >>>type((xforxinrange(10)))

  <class'generator'>

  >>>type((xforxinrange(10)))==types.GeneratorType

  True

  所以模块types包含了函数类型,可以用type()和其比较,进行判断

  使用isinstance()

  使用方法:

  1.isinstance(x,Class)判断x是否是Class类型的,比如:

  >>>isinstance(1,int)

  True

  >>>isinstance(dog,Dog)

  True

  >>>isinstance(dog,Animal)

  True

  isinstance(x,(Class1,Class2,...))判断x是否属于Class1,Class2…其中一个数据类型,比如:

  >>>isinstance([1,2,3],(list,tuple))

  True

  >>>isinstance([1,2,3],(dict,tuple))

  False

  isinstance(x,Class1)andisinstance(x,Class2)判断x是否属于Class1和Class2。例如:

  >>>isinstance(dog,Dog)andisinstance(dog,Animal)

  True

  >>>

  注意:优先使用isinstance()判断类型,可以将指定类型和子类型都判断。

  使用dir()

  功能:返回一个对象的所有属性和方法,返回的是一个包含字符串的list。

  定义一个类,包含学生的姓名name和成绩score:

  classStudent(object):

  name='lm'

  def__init__(self,name,score):

  self.__name=name

  self.__score=score

  defGet_Name(self):

  returnself.__name

  defGet_Score(self):

  returnself.__score

  执行如下:

  >>>S1=Student('lama',20)

  >>>dir(S1)

  ['Get_Name','Get_Score','_Student__name','_Student__score','__class__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__init_subclass__','__le__','__lt__','__module__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__','name']

  以上结果得到的就是实例S1的所有属性和方法,类似__xxx__的属性和方法都有特殊的意义。我们可以看到两个属性_Student__name和_Student__score这其实就是我们定义的私有属性__name和__score,我们外部无法访问私有变量,因为内部将私有属性名改变了,当我们访问这两个属性时,其实就是访问了私有变量。所以说,总是有办法访问私有属性的。

  getattr(),setattr(),hasattr()函数的使用

  这三个函数从名字就可以看出来,分别是获取实例中的方法或属性,添加实例的方法或属性,判断实例是否有该方法或属性。

  比如:

  1,hasattr()无法判断是否有私有属性

  >>>hasattr(S1,'name')

  True

  >>>hasattr(S1,'_Student__name')

  True

  >>>hasattr(S1,'__name')

  False

  setattr()设置属性,也可以添加属性

  >>>setattr(S1,'name','LAMA')

  >>>S1.name

  'LAMA'

  >>>setattr(S1,'name_1','LAMA')

  >>>S1.name_1

  'LAMA'

  getattr()获取并返回属性,若没有该属性则返回指定值

  >>>a=getattr(S1,'name')#将S1中的`name`值赋给a

  >>>a

  'LAMA'

  >>>a=getattr(S1,'n',404)#不存在该属性,则赋值404

  >>>a

  404

  注意:

  在类中定义的属性,也可以在实例中使用,比如:

  classStudent(object):

  name='lm'

  def__init__(self,name,score):

  self.__name=name

  self.__score=score

  defGet_Name(self):

  returnself.__name

  name就是该类的属性,则每个实例中都存在该属性,比如:

  >>>S1=Student('lama',20)

  >>>S1.name

  'lm'

  >>>Student.name

  'lm'

  但是当实例中也定义了该属性,则实例的属性覆盖类的属性:

  >>>S1.name='LAMA'

  >>>S1.name

  'LAMA'

  >>>Student.name

  'lm'

  当删除该实例的name属性,则重新将该属性变为类属性:

  >>>delS1.name

  >>>S1.name

  'lm'

  所以,不要将类属性和实例属性名重复。

  以上就是关于Python基础教程之面向对象编程如何获取对象信息和属性的内容详解,希望可以对同学们学习有所帮助,请多多支持扣丁学堂。



回复

使用道具 举报