python基础--面向对象

继承 :

注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法

当生成子类对象时,先初始化父类对象,所以如果父类有__init__()方法,并且有属性时,要通过子类的构造赋值
一个类可以有多个子类

注意:先调用 __NEW__   用来构造  生成对象               再调用__init__

class A:
    def __init__(self,name=None):
        self.name=name
        print("a...")
class B:
    def __init__(self,age):
        self.age=age
        print("b...")
class C(A,B):
    def __test__(cls,*args,**kwargs):
        print("test")
    def __init__(self,name=None,age=None):    #再调用__init__
        A.__init__(self,name)
        B.__init__(self,age)
        print("c...")
    def __new__(cls, *args, **kwargs):   #先调用 __NEW__   用来构造  生成对象
        print("new...")

        return object.__new__(cls)

@classmethod  :

                               classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

      #类方法:在方法上添加@classmethod
    @classmethod
    def test(cls):

        print("这是一个类方法")

@staticmethod  :

                     静态方法:静态方法没有参数,静态方法既和类没关系,也和对象没关系,也可以通过类和对象调用

     @staticmethod
     def statictest():

        print("这是一个静态方法")

类属性与方法 :

           类的私有属性 :

                     __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

           类的方法    :

               在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例

 self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self          

       类的私有方法  :

             __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods 

类的专有方法:
__init__ : 构造函数,在生成对象时调用                   __del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换                                             __setitem__ : 按照索引赋值
__getitem__: 按照索引获取值                                 __len__: 获得长度
__cmp__: 比较运算                                                 __call__: 函数调用
__add__: 加运算                                                      __sub__: 减运算
__mul__: 乘运算                                                      __div__: 除运算

__mod__: 求余运算                                                  __pow__: 乘方

单例模式 :

   class SingleTone:

    #定义私有属性
    __instance=None
    #构造方法
    def __new__(cls):
        #判断 __instance是否为空
        if cls.__instance==None:
            #为空时创建
            cls.__instance=object.__new__(cls)
            return cls.__instance
        else:
            #不为空时返回
            return cls.__instance
s=SingleTone()
ss=SingleTone()
print(id(s),id(ss))
对象列表进行排序 :

                class Car:
    def __init__(self,brand=None,price=None):
        self.brand=brand
        self.price=price
        #gt 排序
    def __gt__(self, other):
        #return other.brand.encode("gbk")>self.brand.encode("gbk")
        return self.price>other.price
        #lt排序
    #def __lt__(self, other):
        #中文排序  按照首字母   加  .encode("gbk")
       # return self.brand.encode("gbk")<other.brand.encode("gbk")
        #return self.price<other.price
    def __str__(self):
        return self.brand+str(self.price)
lists=[Car("宝马",200000),Car("奥迪",400000),Car("大众",320000)]
lists.sort()
for i in lists:
    print(i)


python处理异常 :

              try语句按照如下方式工作;
                        首先,执行try子句(在关键字try和关键字except之间的语句)
                        如果没有异常发生,忽略except子句,try子句执行后结束。
                        如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
                        如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
                        一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

                        处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常

例如 :

             def devide():
    try:
        1/0
    except ZeroDivisionError as zd:  #zd 表示异常本身信息
        print("除数不能为0")
        print(zd)
    else:
        print("没有异常")

devide()

异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。

      运行结果  : 抛出异常  进入 except ZeroDivisionError语句      除数不能为0    可以用as    zd   表示异常本身信息

           

猜你喜欢

转载自blog.csdn.net/qq_41378897/article/details/80566530