• Python ---封装


    广义的封装:把类和函数放到类里,公有的

    狭义的封装:把一些变量和方法,隐藏起来不对外公开,私有的_名字(双下划线加名字)

    class Person:

      __conutry = '中国' #私有的静态属性

    print(Person.__country)  -->AttributeError: type object 'Person' has no attribute '__country'

    结论:私有变量只能在类的内部使用,不能在类的外部被调用

             如果非要在类的外部使用类的私有属性,需要Person._Person.__country,进行调用,但是一般不强行调用类的私有变量

             在类的内部调用私有变量,__变量名的形式会发生变形----> _Person.__变量名,在属性的前面自动添加单下划线变量名

       在类的外部不能定义一个私有变量

    类的装饰器方法:classmethod,staticmethod,property

    事例:

    class Circle:

      def __init__(self,r,p=3.14):

        self.r = r

      @property

      deff area(self):

        return p*self.r**2

    # 方法一般都是动词,指某一类事物的动作或者技能,但是圆的面积是名词,但是计算数据又必须写方法,所以装饰器可以将函数伪装成一个属性,通过@property实现

    c1 = Circle(3)

    c1.area #添加@property在调用计算面积的方法时,不需要加括号,类似于调用类的属性,一个函数的砂上面添加property,在调用的时候就不需要添添加括号,否则会报错

    @property方法的成对出现的方法

    class Goods:
    def __init__(self,price,discount):
    self.__price = price
    self.discount = discount
    @property
    def price(self):
    return self.__price * self.discount
    @price.setter #写这个方法的前提是,已经用property对属性进行装饰
    def price(self,newprice):
    self.__price = newprice
    g = Goods(7,0.8)
    print(g.price)
    g.price = 10
    print(g.price)

    classmethod某一个类中的方法,并没有用到类的实例中的具体属性,而只是用到类的静态变量,就用类方法,调用的时候直接使用类名.方法名

    class Person:

      Country = '中国人'

      @classmethod

      def country(cls):

        print('当前角色的国籍是%s'%cls.country) 

    Person.country

    staticmethod 方法:如果一个方法既不会用到类的属性,也用不到实例化对象的属性,就应该定义一个静态方法,调用的时候直接 类名.方法名

  • 相关阅读:
    tcp_wrapper过滤
    cobbler无人值守批量安装Linux系统
    PXE+kickstart无人值守安装CentOS 7
    kickstart文件详解
    SHELL脚本--shell数组基础
    SHELL脚本--管道和重定向基础
    第4章 DHCP服务
    第3章 NFS基本应用
    man sm-notify(sm-notify命令中文手册)
    man statd(rpc.statd中文手册)
  • 原文地址:https://www.cnblogs.com/xiaoAzaina/p/9073558.html
Copyright © 2020-2023  润新知