zoukankan      html  css  js  c++  java
  • python 中面向对象编程简单总结1

    1.类的定义方式

    class ClassName(object): #object 表示继承的类,默认为object
        pass

       类的使用类似函数的调用,也可以认为是调用了一次模板来创建一个实例。

    2.创建对象的属性和方法

      不同于java等语言的定义,python是动态语言,因此可以给同一个类的不同实例动态地增加不同的属性。

    xiaoming = Person()
    xiaoming.name = "xiaoming" #赋值的时候创建一个实例的属性
    xiaoming.gender = "male"
    xiaohong = Person()
    xiaohong.school = "sichuan university" #和xiaoming的属性可以不同
    xiaohong.sex = "female"

      在Python的中方法也可以动态地增加到实例对象中,需要用到  types.MethodType() ,这种情况在通常情况下不多见!一般还是定义在类中。

    import types
    def fn_get_grade(self):
        if(self.score >= 80):
            return 'A'
        elif(self.score >= 60):
            return 'B'
        else:
            return 'C'
    class Person(object):
        def __init__(self,name,score):
            self.name = name
            self.score = score
    p1 = Person('Bob',90)
    #动态为p1绑定方法
    p1.get_grade = types.MethodType(fn_get_grade,p1,Person)
    print p1.get_grade()   #会输出A,方法动态绑定到p1对象上了
    p2 = Person('Alice',65)
    print p2.get_grade() #Error,p2没有这个方法

    3.初始化实例属性

    def __init__(self,attr1,attr2): #在创建实例是被自动调用
        self.attr1_name = attr1
        self.attr2_name = attr2

    4.访问限制

       以双下划线开头,且不以双下划线结尾的属性名,无法被外界访问

    5.创建类属性和方法

      为类所有,没有用self.attr 的方式来绑定到对象的属性,它在类的方法中要通过 类名.类属性名 如: Person.cout 来访问。千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。

    class Person(object):
        count = 0  #定义类属性
        @classmethod  #标记类方法
        def how_many(cls): #cls表示类本身,作用相当于self
            return cls.count
        def __init__(self,name):
            self.name = name
            Person.count = Person.count + 1 #没有cls,需要用类名来访问类属性
    print Person.how_many()
    p1 = Person('Bob')
    print Person.how_many()
  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/roger9567/p/4596681.html
Copyright © 2011-2022 走看看