• 技术文章 >Python技术 >Python基础教程

    python3类中的Cat变量使用有限制吗?

    小妮浅浅小妮浅浅2020-11-16 14:22:02原创2128
    看到cat我相信小伙伴就会想到dog,毕竟我们前两篇刚刚讲说。cat和dog的用法差不多,相信本次小伙伴们的学习会进行的非常顺利。本期我们也会从最基本的定义讲起,等大家了解的基本的用法,再进行代码的实战教学。内容篇幅比较长,不过小编相信大家的实力都是没有问题的。


    这里定义了Cat类和它的子类Blackcat,主要说明两个主题:私人属性、方法的继承与覆盖

    私人属性的使用是受到一定限制的,这里主要说明在哪些地方可以用,哪些地方不能调用

    因为子类继承父类时,会将父类的所有方法都继承过来,但是如果在子类中定义了一个和父类同名的方法,则会将父类的方法覆盖下去,__init__也是如此

    定义类

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    class Cat(Animal):

         

        def __init__(self, weight): # 覆盖了父类的__init__,所以定义实例时不需要指定name和age

            self.__weight = weight

            self._weight = weight + 1

            self.weight = self._weight + 1

         

        def get_myweight(self):

            print("My weight is", self._weight, "kg")

         

        def get_trueweight(self):

            print("Actually the cat's weight is",self.__weight)

         

        @staticmethod

        def print_cat():

            print("这个类是Animal类的子类,也是Blackcat类的父类")

            print("Cat类和Blackcat类结合,主要用于讲解私人属性、方法的继承与覆盖")

             

            print("weight是普通属性,可以在外部访问,即用类调用属性获得,可以被子类内部调用")

            print("_weight这样前面加一个下划线表示希望你不要在外部访问它,但是还是可以访问的,可以被子类内部调用")

            print("__weight这样加两个下划线的是不允许外部访问的,只可以在类中被调用,不可以被子类内部调用")

             

            print("__init__在子类中定义则覆盖了父类中的__init__,不需要指定父类中的属性,也无法调用父类的属性")

            print("在子类中实现和父类同名的方法,也会把父类的方法覆盖掉")

             

    class Blackcat(Cat):

         

        def get_weight(self):

            print("My weight is", self.weight)

         

        def get_weight_again(self): # 可以

            print("Actuall my weight is", self._weight)

             

        def get_true_weight(self): # 这个方法因为无法调用self.__weight所以这个方法无法使用

            print("My weight is exactly", self.__weight)

             

        def get_trueweight(self): # 覆盖了Cat父类中定义的方法

            print("My weight is exactly", self._weight+1)


    创建实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    # 测试私人变量的外部访问

    cole = Cat(5)

    cole.weight

    # 7

    cole._weight

    # 6

    cole.get_trueweight() # 在类中引用__weight,用这个方法返回

    # Actually the cat's weight is 5

    cole._Cat__weight # 非要访问也可以,其实是python解释器把__weight改成了_Cat__weight

    # 5

      

    # 测试私人变量的子类调用

    cain = Blackcat(5)

    cain.get_weight()

    # My weight is 7

    cain.get_weight_again()

    # Actuall my weight is 6

    # cain.get_true_weight() # 报错

      

    # 测试方法的继承与覆盖

    cain.get_myweight() #

    # My weight is 6 kg

    cain.get_trueweight() # 子类中同名函数覆盖父类

    # My weight is exactly 7

    以上就是python3类中的Cat变量的使用,具体的测试方法都在上面,大家可以逐个代码复制测试,相信大家都可以成功测试出结果,小编在这里等待大家的互动~

    专题推荐:python3类
    上一篇:python3类中的Dog如何用来转化? 下一篇:python3类中的super如何调用?

    相关文章推荐

    • python类声明变量类型吗• python类可以继承吗• python类对象和实例对象是一样的吗• python类可以传递参数吗

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网