对象属性和操作函数
对象属性和操作函数
lln133208 发表于3年前
对象属性和操作函数
  • 发表于 3年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 自己对python中的OOP研究之一,对象内数据和操作函数的获取和设置

##创建类和实例## class Student(object): pass class为定义类的关键字,Student为类名,通常类名的首字母为大写。后跟括号中的object为该类的基类baseclass,表明Student是从object继承而来。

类是抽象的概念,而实例是类的具体实现。

student1 = Student()

实例student1中就具有了属于自己的属性和方法,这里可以和C++相对比,属性相当于数据,方法相当于操作函数。

class Student(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def printf(self):
        print self.x
        print self.y

上述代码中__init__(self,x,y)相当于C++的构造函数,其中self表明方法是对自身的操作,在类中定义的函数都至少要有一个参数***self***,而且是第一个参数。其余参数还可以正常使用默认参数,可变参数,关键字参数等。在这里类的实例化需要使用如下的代码:

student2 = Student(1,2)

##面向对象编程的特点##

  1. 封装

    对于类中的数据,可以通过外部的函数来访问,也可以在类中定义函数,通过这些内部函数来处理数据,这样从外部来看,数据只能通过方法来进行处理,相当于封装在实例内部,在一定程度上保证了数据安全。其实python中很难像C++一样严格保证内部私有数据无法从外部直接访问,在编程过程中,需要自己来遵循,使用内部定义的函数来处理数据。

    封装使编程时可以直接使用内部函数,而不需要关注其中实现细节,而且也方便增加函数。

  2. 继承

     class Animal(object):
         def run(self):
             print 'animal is running...'
    
     class Dog(Animal):
         pass
    
     animal1 = Animal()
     dog1 = Dog()
    

    上述代码中定义了Animal类和Dog类,其中Dog子类subclassAnimal类称作基类Base class。这里Dog类继承了Animal类的属性和方法,实例dog1拥有了方法run()。 继承可以在已经存在的类的基础上生成一种新类,后者拥有前者所有的属性和方法,也可以额外增加属性和方法。

  3. 多态

     class Animal(object):
         def run(self):
             print 'animal is running...'
    
     class Dog(Animal):
         def run(self):
             print 'dog is running...'
    
     dog2 = Dog()
    

    上述代码在子类Dog中定义了名为run的函数,与基类Animal中的方法同名。此时子类实例调用该方法时,则默认使用子类方法,即子类方法覆盖基类方法。

    著名的开闭原则

    • 对扩展开放:允许新增子类
    • 对修改封闭:不需要修改依赖基类类型的函数

##对象类型判断## ###type()### 类型常量从types模块导入,常用的有

  • types.ListType

      `type([1,2,3])` 
    
  • types.IntType

      `type(1)`
    
  • types.FloatType

      `type(1.2)`
    
  • types.StringType

      `type('hello')`
    
  • types.TypeType

      `type(str)`等
    

对于类,使用type()***不会***认为子类也属于基类。

###isinstance()### 使用isinstance()认为子类也属于基类。

##对象属性和方法的获取和设置##

  • hasattr(a,'x') 判断对象中是否有该属性x,若有返回True,否则返回False
  • getattr(a,'x',default_value) 获得对象中属性x的值,若x存在返回值,否则返回default_value。 若不设置default,对象中没有x时返回False
  • setattr(a,'x',value) 设置对象属性x的值为value
共有 人打赏支持
粉丝 3
博文 19
码字总数 11023
×
lln133208
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: