面向对象编程

Posted islvgb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程相关的知识,希望对你有一定的参考价值。

对象:包含数据和操作数据的函数

面向对象编程:把计算机程序视为一组对象的集合,每个对象可以接收其他对象的消息,并处理这些消息。

类:抽象的概念(即包含数据,又包含操作数据的方法)

实例:类中的具体对象

class Student(object):
    pass

class后面是类名,通常以大写字母开头,括号里表示从那个类继承,没有合适的继承类,就使用object,所有类最终都会继承它

创建实例

someone = Student()
someone.name = "zhangsan"

someone即为一个实例,可以给它增加属性,如name

class Student(object):
    def __init__ (self,name,score):
        self.name = name
        self.score = score  #实例的score属性等于参数score的值

创建实例时必须传入参数,self代表其本身,python解释器会自己把实例变量传入

数据封装


在类内部定义函数访问数据,即把“数据”封装,也称为类的方法

将类的数据和方法都封装在类中,外部只需要按要求调用即可,不需要知道类内部是如何实现的

调用:someone.print_score()

参数如同正常函数参数设计,依据类中函数,调用时可传入必要的参数

实例变量名称可以不同

访问限制

class Student(object):
    def __init__(self,name,score):
        self.__name = name
        self.__score = score
    def print_name(self):
        print("%s:%s" % (self.__name,self.__score))
    def get_name(self):
        return self.__name
    def set_score(self):
        self.__score = score
bart = Student("some one",23456)
# bart.print_name()
# bart.__name = "a"
# bart.print_name()
# print(bart.__name)
# bart.get_name()

 继承

子类继承父类,获得父类全部功能

当子类与父类函数名相同,子类将覆盖父类函数,在代码运行时,总是调用子类函数

返回类信息

获取对象类型 type()

import types
def fn():
    pass
type(fn) == types.FunctionType

类型首字母大写

isinstance()判断对象是否是某种类型

子类属于父类

isinstance([1,2,3],(list,tuple)) 判断变量是否是某些类型中的一种

>>> dir(‘ABC‘)
[‘__add__‘, ‘__class__‘,..., ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘,..., ‘zfill‘]
每个类型都会包含诸多方法,如len() == __len__() __len__为对象所属类型中定义的方法

 getattr(实例,属性,404)获取属性 ,若无返回404

hasattr() 判断有无该属性

setattr(obj,"y",123)设置y属性

 

class Student(object):
    count= 0
    def __init__ (self,name):
        self.name = name
        Student.count = Student.count + 1
        print(Student.count)
bart = Student("KO")
bart.name
bo = Student("asdf")

对类绑定属性

 

以上是关于面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

Scala的面向对象与函数编程

面向对象编程

面向过程编程与面向对象编程

Java面向对象

面向对象编程(OOP)