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

 

posted @ 2018-05-22 18:59  小A在哪  阅读(191)  评论(0编辑  收藏  举报