zoukankan      html  css  js  c++  java
  • 封装

    面向对象之封装

    在什么场景下需要封装

    1.隐藏一个属性 不让类外部调用
    2.保护中国属性 不让被随意修改
    3.保护属性不被子类继承

    class Person():
        def __init__(self,name,age):
            self.name = name
            self.__age = age    #定义为私有属性
        def get_age(self):
            return self.__age
    
    p = Person('judy',18)
    # print(p.__age)  #此处报错,不可以直接调用私有属性
    print(p.get_age())

    与封装有关的三个内置方法

    property

    class Person():
        def __init__(self,name,age):
            self.name = name
            self.__age = age    #定义为私有属性
        @property   #把一个方法伪装成一个属性,不能有self之外不能有其他的参数。调用时 直接调用函数名,不用加()
        def age(self):
            return self.__age
        @age.setter     #给属性设置值
        def age(self,age):
            self.__age = age
        @age.deleter    #删除私有属性age
        def age(self):
            del self.__age
    p = Person('judy',18)
    p.age = 16  #给私有属性age赋值
    print(p.age)    #查看私有属性age
    del p.age   #删除私有属性age
    property

    classmethod:  把一个方法变成类方法,不需要实例化对象,通过类名就可以访问类属性和类方法

    class Goods():
        __discount = 0.6
        def __init__(self,name,price):
            self.__name = name
            self.__price = price
        #定义一个方法修改打折
        @classmethod
        def change_disc(cls,new):
            cls.__discount = new
    Goods.change_disc

    staticmethod :   不需要实例化对象可以直接调用# 完全面向对象的程序中,如果一个函数既和对象 没关系,又和属性没有关系 就用静态方法

    class Person():
        def __init__(self,name,password):
            self.name = name
            self.password = password
        @staticmethod
        def login():
            print('input your name and password')
    Person.login()
  • 相关阅读:
    Java-MyBatis-MyBatis3-XML映射文件:select
    Java-MyBatis-MyBatis3-XML映射文件:XML映射文件
    专业词汇-计算机-Java:JPA
    图书-计算机-软件编程-SpringBoot:《Spring Boot 企业级应用开发实战》
    图书-计算机-软件编程-SpringBoot:《Spring Boot2 + Thymeleaf 企业应用实战》
    svndumpfilter
    svnlook
    svnadmin
    svn
    sum
  • 原文地址:https://www.cnblogs.com/jiangchengcheng/p/9610826.html
Copyright © 2011-2022 走看看