面向对象

一.对象

对象,指的是内存中一块专门用来存储数据的区域。

对象包含三个部分:

  • id:标识
  • type:类型
  • value:值

二.面向对象

Python属于面向对象的编程语言。

三.类的创建

类的基本结构:

class 类名([父类]):
    
    公共的属性...
    
    # 对象的初始化方法
    def __init__(self,...):
        ...
    
    # 其他的方法
    def method_1(self,...):
        ...
    
    def method_1(self,...):
        ...
    
    ...

示例:

# 定义一个人类
class Person():

    # 构造方法
    def __init__(self, name, age):
        self.name = name
        self.age = age


# 创建一个人类对象
student_01 = Person('朱茵', 18)
print(student_01.age)

四.封装

封装是面向对象的三大特征之一 ,为了限制随意修改对象的属性值。 可以采用以下几种方法:1.隐藏真实的属性名 2.使用getter以及setter方法。

狗类:

class Dog():

    def __init__(self, name, age):
        # hidden_name才是真实的属性值
        self.hidden_name = name
        self.hidden_age = age

    # getter方法
    def get_name(self):
        return self.hidden_name

    # setter方法
    def set_name(self, name):
        self.hidden_name = name

    def get_age(self):
        return self.hidden_age

    def set_age(self, age):
        # 可以对传入的值进行判断
        if age < 0 or age > 100:
            print('数据不合法...')
            return
        self.hidden_age = age

# 创建一个对象
dog01 = Dog('小黑' , 4)
print(dog01.get_name()) # 小黑

dog01.set_name('旺财')
print(dog01.get_name()) # 旺财

# 修改小黑的年龄
dog01.set_age(-10)  # 数据不合法...
print(dog01.get_age()) # 4

完善:目前hidden_XXX属性其实还是能够在外部访问,可以在属性前面加上'__',这样该属性就只能在内部访问了

class Person():

    def __init__(self, name):
        # __name只能在内部访问
        self.__name = name

    # getter方法
    def get_name(self):
        return self.__name

    # setter方法
    def set_name(self, name):
        self.__name = name

# 尝试访问__name
person01 = Person('迪丽热巴')
print(person01.__name)  # Traceback (most recent call last)
# 尝试修改
person01.__name = '李沁'
print(person01.get_name())  # 迪丽热巴

隐藏属性'__XXX',其实是Python内部自动改了个名,修改为了:_类名__属性名。因此,实际运用中一般不用双下划线,使用单下划线就可以了,这只是起到告诉别人这是个私有属性,不要轻易修改的意图。

五.装饰器

class Person():
    def __init__(self, name):
        self._name = name

    # property装饰器,用来将一个get方法,转换为对象的属性
    # 添加property装饰器后,方法名与属性名必须一致
    @property
    def name(self):
        print('get方法执行了...')
        return self._name

    # setter方法的装饰器: @属性名.setter
    @name.setter
    def name(self, name):
        print('set方法调用了...')
        self._name = name

# 调用
p = Person('迪丽热巴')
p.name = '章子怡' # set方法调用了...

print(p.name)   # get方法执行了... 章子怡
posted @ 2022-06-12 18:40  Na氢氧  阅读(47)  评论(0)    收藏  举报