首页 > 编程 > Python > 正文

python中的面向对象

2019-11-06 07:12:49
字体:
来源:转载
供稿:网友

一. 定义类 经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类:

class A: pass

新式类:如果你的类没有继承任何父类,object将作为默认的父类

class B(object): pass

Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Python 3.x中默认都是新式类,不必显式的继承object 二. 定义类的属性 1.1 直接在类里定义

class A(object): a=100

在不做修改的情况下,所以这个类的对象的属性都是一样的 1.2 在构造函数里定义

class A(object): def __init__(self,a): self.a=100

构造对象时把一些属性的值传进去,不同的对象可以有不同的属性 2.访问控制 python没有访问控制,没有提供私有属性的功能,在日常编程中通过一些编程规范和命名规则进行约束 前面加_表示私有属性(只是一种编程规范,不是python语法的功能,仍然可以访问到) 前面加__变相实现了部分私有属性的访问

class PRogramer(object): def__init__(self,weight): self.__weight=weight def get_weight(self): return self.__weightif __name__=='__main__': p=Programer(80) print(p.get_weight()) print(p._Programer__weight)#80#80

三. 定义类的方法 方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls 静态方法:由类调用;无默认参数

class Foo: def __init__(self, name): self.name = name def ord_func(self): """ 定义普通方法,至少有一个self参数 """ # print self.name print '普通方法' @classmethod #类方法的装饰器 def class_func(cls): """ 定义类方法,至少有一个cls参数 """ print '类方法' @staticmethod #静态方法的装饰器 def static_func(): """ 定义静态方法 ,无默认参数""" print '静态方法'# 调用普通方法,对象名调用f = Foo()f.ord_func()# 调用类方法,类名调用Foo.class_func() # 调用静态方法,类名调用Foo.static_func()

四. 类的继承 继承的子类会继承父类的所有属性,也可以自己定义,覆盖父类的属性和方法 对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法 class 类名(要继承的类): 如果不继承类,则继承object类,object类是所有类的父类

调用父类的方法: super(自己的类名,self).相应的方法名

多继承: 1、Python的类可以继承多个类,java和C#中则只能继承一个类 2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先 当类是经典类时,多继承情况下,会按照深度优先方式查找 当类是新式类时,多继承情况下,会按照广度优先方式查找


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表