Python3 面向对象编程

来源:互联网 发布:java base64类 编辑:程序博客网 时间:2024/05/16 11:10

Python3 面向对象编程

  • 定义类通过class关键字:
class Student(object):    pass
  • class关键字后是类名,类名通常以大写字母开头
  • 之后是(object),表示该类从哪个类继承下来。如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类
  • __init__方法,在创建实例的时候可以把必须绑定的属性填写进去。
class Student(object)    def __init__(self,name,score):    self.name=name    self.score=score
  • __init__方法后的第一个参数永远是self,表示创建的实例本身。在__init__内部,可以把各种属性绑定到self,因为self指向创建的实例本身。

数据封装

class Student(object):    def __init__(self,name,score):    self.name=name    self.score=score    def print_score(self):        print('%s:%s' %(self.name,self.score))
  • 定义一个方法,除了第一个参数是self之外,其他与普通函数一样。
  • 调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数需要正常传递

访问限制

  • 如果要让内部属性不被外部访问,可以加__变成私有变量,只有内部可以访问,外部不能访问。
class Student(object):    def __init__(self,name,score):    self.__name=name    self.__score=score    def print_score(score):        print('%s:%s' %(self.__name,self.__score))

获取对象信息

  • 使用type()判断对象类型
  • 使用types模块中定义的常量判断是否是函数
import typesdef fn():    passtype(fn)==types.FunctionType
  • 判断class的类型,使用isinstance()函数
  • 获得一个对象所有的属性和方法,使用dir(),返回一个包含字符串的list。
    *类似__xxx__的属性和方法在Python中有特殊用途。如__len__方法返回长度。调用len()函数获取一个对象的长度,实际在len()内部会自动调用该对象的__len__()方法。以下等价
>>>len('ABC')3>>>'ABC'.__len__()3
  • getattr()setattr()hasattr(),可以操作一个对象的状态。
clas MyObject(object):    def __init__(self):        self.x=9    def power(self):        return self.x * self.xobj=MyObject()>>>hasattr(obj,'x')True>>>obj.x9>>>hasattr(obj,'y')Flase>>>setattr(obj,'y',19)>>>hasattr(obj,'y')True>>>getattr(obj,'y')19>>>obj.y19

实例属性和类属性

  • Python是动态语言,根据类创建的实例可以任意绑定属性
    给实例绑定属性的方法:通过实例变量,或self变量
class Student(object):        def __init__(self,name):s=Student('Bob')s.score=90
  • 若类本身需要绑定一个属性,可以直接在类中定义属性,即类属性。
    类属性虽然归类所有,但类的所有实例都可以访问。
class Student(object):    name='Student'
  • 不要把实例属性和类属性使用相同的名字,相同名称的实例属性将屏蔽掉类属性。