美文网首页
python基础学习2(面向对象)

python基础学习2(面向对象)

作者: SecondRocker | 来源:发表于2018-07-08 21:11 被阅读12次

    python 是完全面向对象,一切皆对象。那么对象怎么使用呢?

    定义类

    类是抽象的模板,对象是类的实例;python也是用class定义类

    #定义类(无实现时后跟pass)
    class A:pass
    #初始化实例(构造函数无参数)
    A()
    #定义有参数构造函数
    class A:
      def __init__(self,name,age):
        self.name = name
        self.age = age
      def print_info(self):
        print("name:%s,age:%s" % (self.name,self.age))
      def __private_m(self):
        print('private_method call')
      def call_private(self):
        print('can only call inside class')
        self.__private_m()
    A('wang',30).print_info()
    A('me',12).call_private()
    
    #第一个参数为self标明为 实例方法,实例方法调用时 直接忽略第一个参数,使用与ruby类似
    # 双下划线开头的方法,变量,是私有的,只能在类内访问
    

    继承

    python 支持多继承

    class B(A):pass
    B('wang',30).print_info()
    isinstance(B('s',4),A) #返回True,B的实例也算A的实例
    #B继承了A的方法和属性
    class C(A,B,C):pass #多继承
    

    属性

    如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:


    image.png

    hasattr 方法判断对象有没有指定属性,类似ruby的respond_to?
    这么用:

    a = A('wang',20)
    hasattr(a,'name') #返回True
    

    setattr设置对象的属性:

    setattr(a,'name','peter')
    print(a.name)  #peter
    

    getattr获取对象属性

    getattr(a,'name')
    #如果试图获取不存在的属性,会抛出AttributeError的错误,可以传入一个default参数,如果属性不存在,就返回默认值
    getattr(a,'b')
    getattr(a,'b','c')
    

    由于Python是动态语言,根据类创建的实例可以任意绑定属性。
    给实例绑定属性的方法是通过实例变量,或者通过self变量:

    a.address = 'bj'
    class C:
      name = 'c class'
    
    print(C.name) #c class
    

    动态添加方法
    class A:pass

    def say_sth(self,who):
    print("%s:say hello~" % who)

    A.say_sth = say_sth
    A().say_sth('me')
    使用slots限制只能添加特定属性

    class A:
      __slots__ = ['name','age']
    
    a = A()
    a.name = 'wang'
    a.address = 'bj' #Error
    

    使用 @property 定义方法型属性

    class A:
      @property
      def name(self): #get方法
        return self.__name
      @name.setter
      def name(self,name):#set方法
        self.__name =  name
    
    a = A()
    a.name = 'wang'
    a.name #wang
    

    相关文章

      网友评论

          本文标题:python基础学习2(面向对象)

          本文链接:https://www.haomeiwen.com/subject/dsxauftx.html