当前位置: 首页 > 图灵资讯 > 行业资讯> python3类中的Cat变量使用有限制吗?

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

来源:图灵python
时间: 2024-11-19 14:02:59

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

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

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

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

定义类

classCat(Animal):

def__init__(self,weight):#覆盖了父类的__init__,所以定义实例时不需要指定name和age
self.__weight=weight
self._weight=weight+1
self.weight=self._weight+1

defget_myweight(self):
print("Myweightis",self._weight,"kg")

defget_trueweight(self):
print("Actuallythecat'sweightis",self.__weight)

@staticmethod
defprint_cat():
print("这个类是Animal类的子类,也是Blackcat类的父类")
print("Cat类和Blackcat类结合,主要用于讲解私人属性、方法的继承与覆盖")

print("weight是普通属性,可以在外部访问,即用类调用属性获得,可以被子类内部调用")
print("_weight这样前面加一个下划线表示希望你不要在外部访问它,但是还是可以访问的,可以被子类内部调用")
print("__weight这样加两个下划线的是不允许外部访问的,只可以在类中被调用,不可以被子类内部调用")

print("__init__在子类中定义则覆盖了父类中的__init__,不需要指定父类中的属性,也无法调用父类的属性")
print("在子类中实现和父类同名的方法,也会把父类的方法覆盖掉")

classBlackcat(Cat):

defget_weight(self):
print("Myweightis",self.weight)

defget_weight_again(self):#可以
print("Actuallmyweightis",self._weight)

defget_true_weight(self):#这个方法因为无法调用self.__weight所以这个方法无法使用
print("Myweightisexactly",self.__weight)

defget_trueweight(self):#覆盖了Cat父类中定义的方法
print("Myweightisexactly",self._weight+1)

创建实例

#测试私人变量的外部访问
cole=Cat(5)
cole.weight
#7
cole._weight
#6
cole.get_trueweight()#在类中引用__weight,用这个方法返回
#Actuallythecat'sweightis5
cole._Cat__weight#非要访问也可以,其实是python解释器把__weight改成了_Cat__weight
#5

#测试私人变量的子类调用
cain=Blackcat(5)
cain.get_weight()
#Myweightis7
cain.get_weight_again()
#Actuallmyweightis6
#cain.get_true_weight()#报错

#测试方法的继承与覆盖
cain.get_myweight()#
#Myweightis6kg
cain.get_trueweight()#子类中同名函数覆盖父类
#Myweightisexactly7

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