Python编程:类

1. 示例属性与类属性

实例属性用于区分不同的实例,每个实例各自拥有,互相独立
类属性是每个实例的共有属性,有且只有一份

class Circle(object):
   pi = 3.14  # 类属性

   def __init__(self, r):
       self.r = r

类属性可以被同名的示例属性覆盖。

2. 方法的访问限制

1. 双下划线 

Python 类中如果有属性/方法不希望被外部访问,我们可以在属性/方法命名时以双下划线开头( __ ),那么该属性/方法就不能使用原变量名访问,使得该属性/方法变为本类私有的(伪私有)。

但是,加双下划线__xx 的属性/方法,可以通过“ _类名__xx ”可以访问到属性/方法

2. 单下划线

以单下划线开头的属性/方法"_xxx",虽然也可以被外部访问,但按照习惯,他们不应该被外部访问

3. classmethod和staticmethod装饰方法

1. @classmethod

类方法,我们不用通过实例化类就能访问的方法。而且@classmethod 装饰的方法不能使用实例属性,只能是类属性。它主要使用在和类进行交互,但不和其实例进行交互的函数方法上。

例子:

class Circle(object):
   __pi = 3.14

   def __init__(self, r):
       self.r = r

   @classmethod
   def pi(cls):
       return cls.__pi

   def area(self):
       """
圆的面积
       """
       return self.r ** 2 * self.__pi

print(Circle.pi())  # 没有实例化 能直接访问pi() 方法
circle1 = Circle(2)
print(circle1.pi()) # 也可以通过实例访问pi()方法

2. @staticmethod

@staticmethod 和@classmethod非常的相似,但是@staticmethod 不强制要求传递参数(它做的事与类方法或实例方法一样)。

@staticmethod使用在有些和类相关函数,但不使用该类或者该类的实例。如更改环境变量、修改其他类的属性等。

一句话: @staticmethod 修饰的方法是放在类外的函数,我们为了方便将他移动到了类里面,它对类的运行无影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值