• python3面向对象(1)


    1.定义类,实例化对象:

    class Nanny(object):    #class 定义一个类名Nanny,这个类继承了object
        def __init__(self,name,age):    #__init__初始化方法,在创建对象的时候自动调用,第一个参数是必须有的self指的是创建的对象,
            self.name = name
            self.age = age
    
        def cook(self):   #在类中的普通函数叫做方法;都有一个self参数;可以被创建的对象调用
            print("这是一个做饭的过程")
    
    obj1 = Nanny("小红",22)   #创建一个obj1对象,传入参数;这个参数被传入__init__初始化方法中
    print(obj1.name)
    print(obj1.age)
    obj1.cook()  #调用类中的方法
    

     2类中的方法(普通方法(实例化方法),类方法,静态方法)和 类属性

    class Nanny(object):
        Nanny_name = "this is Nanny name"   #这是一个类属性,可以通过类型.调用
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        @classmethod #这是一个类方法;通过@classmethod 
        def cook1(cls):  #方法的参数是cls 代表的这个类
            print("我是一个类方法")
    
        @staticmethod   #这是一个静态方法,通过@staticmethod
        def cook2():  #方法里面可以没有参数
            print("我是一个静态方法:这是我的使用说明")
    
        def cook(self):
            print("这是一个做饭的过程")
    
    
    obj1 = Nanny("小红",22)
    print(obj1.name)
    print(obj1.age)
    #方法的调用,实例化的对象可以调用类中的所有方法 obj1.cook() obj1.cook1() obj1.cook2() #但是类名只能调用静态方法和类方法 Nanny.cook1() Nanny.cook2()

     3继承

    何为继承,继承既新建的类具有被继承类的属性和方法;继承的目的是为了减少不必要的代码,实现代码的重复利用。那如何实现继承呢看代码:

    class Parsenclass1(object):  #定义一个类让这个类继承object(python3中默认继承object;python2中需要指定)
        Parsen_var = "this is parsen var"
    
        def __init__(self):
            print("111")
    
        def f1(self):
            print("这是Parsenclass1的f1")
    
        def f2(self):
            print("这是Parsenclass1的f2")
      
       def f3(self):
         print("这是Parsenclass1的f3")
      def f4(self): 
         print("这是Parsenclass1的f4")

    class son1(Parsenclass1): #定义一个son1类,让这个类继承 Parsenclass1;那么这个类型具有父类中的所有属性和方法(除去私有的,暂时不表,后面介绍) 
      son1_var = "son1关键字"
      def __init__(self):
        print("这是son1")

      def f1(self):
        print("这是son2的f1")

      def f2(self):
        print("这是son1的f2")
        self.f1()


    class son2(Parsenclass1): #定义一个son2,和son1的父类一样

      son2_var = "这是son2关键字"

      def __init__(self):
        print("这是son2")

      def f1(self):
        print("这是son2的f1")

      def f2(self):
        print("这是son2的f2")
      
      def f3(self):
         print("这是son2的f3")
    class son_son(son1,son2): #定义一个son_son类,继承son1和son2;这是个多继承 son_son_var = "这是son_son的关键字" def __init__(self): print("这是son_son") def f1(self): print("这是son_son的f1") obj1 = son_son() #创建对象 obj1.f2() # 调用f2()函数
    obj1.f3()
    obj1.f4()
    print(son_son.__bases__)

    执行结果如下:

    这是son_son  #__init__函数默认执行
    这是son1的f2   #当执行f2方法时,现在创造该对象的类中寻找,如果找到了就执行,如果没有找到则会向父类中寻找;这个父类时son1和son2,先在son1中寻找;找到了执行f2();当执行f2()函数的时候遇到了
    self.f1()函数,那这个f1函数指向的又是谁呢;创建类的时候self代表的是实例化对象(obj1),所以先去创建这个对象的类(son_son)中寻找f1函数; 这是son_son的f1
    这是son2的f3    #当调用f3的时候,son1中没有f3函数;那么这个时候是继续沿着son1的父类中寻找还是去son2中寻找呢;看结果这个是先到son2中寻找f3函数(新式类中寻找父类的方法是从左到右,广度优先)
    这是Parsenclass1的f4 #调用f4的时候先去son_son类中找,没有找到再去son1和son2中依次寻找,也没有找到最后去了Parsenclass1中寻找 (<class '__main__.son1'>, <class '__main__.son2'>) #类.__bases__ 显示该类的父类
  • 相关阅读:
    vim字体设置
    windows下eclipse打不开
    ubuntu的无线网无法连上
    将ubuntu系统录到u盘上
    使用UltraISO刻录系统到U盘可能会出现打不开的情况
    windows安装程序制作
    安装ubuntu双系统
    数据库插入数据时间比较
    LeetCode 189. Rotate Array
    LeetCode 228. Summary Ranges
  • 原文地址:https://www.cnblogs.com/yan-peng/p/9957644.html
Copyright © 2020-2023  润新知