python的隐藏数据,__init__()和继承的使用

一、隐藏数据

隐藏数据通常是指对数据进行封装或隐藏,使其对外部代码不可见或不可直接访问。这是一种重要的编程概念,被称为"信息隐藏"或"封装",是面向对象编程的核心特性之一。通过隐藏数据,可以增加代码的安全性、可维护性和灵活性。。Python中隐藏数据的主要目的是保护数据不被意外或恶意地篡改,同时提供统一的访问接口以便于后续代码的维护和扩展。

方法:

1.使用私有成员:在Python中,可以使用双下划线(__)作为成员变量的前缀,将其定义为私有成员。私有成员只能在类的内部访问,无法直接从类的外部访问。

class MyClass:
    def __init__(self):
        self.__private_data = 42

    def get_data(self):
        return self.__private_data

obj = MyClass()
print(obj.get_data())  # Output: 42
# print(obj.__private_data)  # 无法直接访问,会引发 AttributeError

运行结果:

2.使用属性(Property):Python中的属性是一种特殊的方法,可以在访问类成员时进行自定义操作。通过使用属性,可以对访问数据进行控制和验证。

class MyClass:
    def __init__(self):
        self.__private_data = 42

    @property
    def data(self):
        return self.__private_data

obj = MyClass()
print(obj.data)  # Output: 42
# obj.data = 10  # 无法直接设置属性,会引发 AttributeError

运行结果:

3.使用getter和setter方法:另一种隐藏数据的方法是通过定义getter和setter方法来访问和修改私有成员。

class MyClass:
    def __init__(self):
        self.__private_data = 42

    def get_data(self):
        return self.__private_data

    def set_data(self, value):
        self.__private_data = value

obj = MyClass()
print(obj.get_data())  # Output: 42
# obj.__private_data = 10  # 无法直接访问,会引发 AttributeError
obj.set_data(10)
print(obj.get_data())  # Output: 10

运行结果:

4.应用示例:

#__init__()方法的调用
#定义汽车类
class Car:
    def __init__(self):
        self.wheelNum = 4
        self.color='蓝色'

    #def move(self):
        #print('车在跑,目标:夏威夷')

#创建对象
BMW=Car()

print('车的颜色为%s'%BMW.color)
print('车轮胎数量为:%d'%BMW.wheelNum)

 运行结果:

二、实现__del__()方法

创建对象后,python解释器默认调用__init__()方法;
当删除一个对象时,python解释器也会默认调用一个方法,这个方法是__del__()方法

1.__del__()方法:

import time
class Animal(object):
    def __init__(self,name):
        print('__init__方法被调用')
        self.__name=name

    #析构方法
    #当对象被删除时,会自动被调用
    def __del__(self):
        print("__del__方法被调用")
        print("%s对象马上被干掉了..."%self.__name)

#创建对象
dog=Animal("哈皮狗")

#删除对象
del dog

cat=Animal("波斯猫")
cat2=cat
cat3=cat

print("---马上 删除cat对象")
del cat
print("---马上 删除cat2对象")
del cat2
print("---马上 删除cat3对象")
del cat3

print("程序2秒钟后结束")
time.sleep(2)

 运行结果:

三、继承

继承是面向对象编程的重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承使得代码重用和扩展变得更加容易。子类可以继承父类的特性,并且可以在不修改父类的情况下添加新的功能或修改已有的功能。通过继承,我们可以在子类中扩展父类的功能,同时保持代码的简洁和可维护性

1.继承关系的语法:

class ParentClass:
    # 父类的属性和方法

class ChildClass(ParentClass):
    # 子类的属性和方法

2.如何使用继承:

class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

class Cat(Animal):
    def make_sound(self):
        return "Meow!"

# 创建子类的实例并调用继承的方法
dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.name)  # Output: Buddy
print(dog.make_sound())  # Output: Woof!

print(cat.name)  # Output: Whiskers
print(cat.make_sound())  # Output: Meow!

运行结果:

3.继承示例:

#定义一个父类
class Cat(object):

    def __init__(self,name,color="白色"):
        self.name=name
        self.color=color

    def run(self):
        print("%s--在跑"%self.name)

#定义一个子类,继承Cat类如下:
class Bosi(Cat):
    def setNewName(self,newName):
        self.name=newName

    def eat(self):
        print("%s--在吃"%self.name)


bs=Bosi("印度猫")
print('ba的名字为:%s'%bs.name)
print('bs的颜色为:%s'%bs.color)
bs.eat()
bs.setNewName('波斯')
bs.run()

运行结果:

 

 4.应用示例

        ①子类在继承的时候,在定义类时,小括号()中为父类的名字
        ②父类的属性、方法,会被继承给子类

class Animal(object):
    def __init__(self,name='动物',color='白色'):
        self.__name=name
        self.color=color

    def __test(self):
        print(self.__name)
        print(self.color)

    def test(self):
        print(self.__name)
        print(self.color)

class Dog(Animal):
    def dogTest1(self):
        #print(self.__name)
        #不能访问到父类私有属性
        print(self.color)

    def dogTest2(self):
        #self.__test()
        #不能访问父类的私有方法
        self.test()

A=Animal()
#print(A.__name)
#程序出现一场,不能访问私有属性
print(A.color)
#A.__test()
#程序出现异常,不能访问私有方法
A.test()

print("------分割线------")

D=Dog(name="小花狗",color="黄色")
D.dogTest1()
D.dogTest2()

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值