zoukankan      html  css  js  c++  java
  • Python中面向对象的一些关于私有变量和继承的理解

    • 成员可见性,变量和方法的可见性。使用“__”开头的变量和方法为私有变量和方法
    • class Student():
      
          def __init__(self, name, age):
              # 构造函数
              # 初始化变量的属性
              self.name = name
              self.age = age
              self.__score = 0  # 这里是私有变量
      
          # def __marking(self, score):  # 这里使用__是方法变成私有方法
          def marking(self, score):  # 这里使用__是方法变成私有方法
              if 0 <= score <= 100:
                  self.__score = score
              else:
                  self.__score = 0
              print(self.__score)
      
      stu = Student("王", 19)
      # stu.marking(10)  # 这里调用出错,因为是私有方法
      stu.marking(10)
      # print(stu.score)   # 这里调用出错,因为是私有变量
      stu.__score = 19  # 不报错,原因从下面的代码中,多增加了一个变量'__score': 19
      print(stu.__dict__)  # {'name': '王', 'age': 19, '_Student__score': 10, '__score': 19}
      print(stu._Student__score)  # python 将私有变量变成_Student__score形式,可以访问
      

        

    • 继承:`class A(B):`,A继承于B,B是A的父类。支持多继承。
    • class B():
          sums = 0
      
          def __init__(self, name, age):
              self.name = name
              self.age = age
      
          def get_name(self):
              print(self.name)
      
      
      class A(B):
          def do_homework(self):
              print("hello!")
      
      
      stu = A("王", 20)
      print(stu.sums)
      print(A.sums)
      print(B.sums)
      print(stu.name)
      
      ------------------------------分割线----------------------------------------
      
      class B():
          sums = 0
      
          def __init__(self, name, age):
              self.name = name
              self.age = age
      
          def get_name(self):
              print(self.name)
      
      
      class A(B):
      
          def __init__(self, school, name, age):
              self.school = school
              # B.__init__(self, name, age)  # 这里要传入self,否则报错(形参和实参对应)
              super(A, self).__init__(name, age)  # 使用super调用父类的方法,常用
      
          def do_homework(self):
              print("hello!")
      
      
      stu = A("北大", "王", 20)
      print(stu.sums)
      print(A.sums)
      print(B.sums)
      print(stu.name) 
      print(stu.school)
      

        

    • 当子类的方法和父类的方法重名,会调用子类的方法,覆盖父类的方法,可以使用`super(a, self).do_homework()`来调用重名的父类的方法
  • 相关阅读:
    脑子好,蹦两下!程序员应该玩的小游戏
    推荐博客备份软件blog_bakcup
    经验(转)
    as super
    ActionScript工程如何使用Flash CS的fl包中的UI组件(转)
    astar(转)
    GROUPING,ROLLUP和CUBE(转)
    什么是分区表?为什么要用分区表?如何创建分区表?
    Flash player 详解(zhuan)
    jsfl(转)
  • 原文地址:https://www.cnblogs.com/longbigbeard/p/10464570.html
Copyright © 2011-2022 走看看