Python的类变量和对象变量声明解析

Python中的类变量由类本身拥有,所有对象共享,如`cvar`;对象变量由每个对象独有,以`self.`开头,如`self.name`。类变量声明在类的语句块中,而对象变量通常在`__init__`方法中声明以确保对象创建时初始化。Python使用`__`前缀表示私有成员,限制外部直接访问。
摘要由CSDN通过智能技术生成

Python的类变量和对象变量声明解析

原文链接:https://www.cnblogs.com/bwangel23/p/4330268.html


Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有。这里我主要想讨论一下他们的声明办法。

首先说的是类变量

只要是声明在类的语句块中,且没有"self."前缀的变量都是类变量,且类变量是被所有对象共享的。

注意红字部分,如果声明在类的方法的语句块中,那么就是局部变量了!比如下面这个例子:

#!/usr/bin/env python
# -* - coding: UTF-8 -* -
#Function: Use the class var

class Person:
    cvar = 1 # 类的变量
    def sayHi(self):
      fvar = 1 # 方法sayHi()中的局部变量

print(Person.cvar)
print(Person.fvar)

那个cvar就是属于Python类的变量,而那个fvar就是方法sayHi()中的局部变量,第11条语句那里就会报错!

接下来我们再来讨论一下对象变量的声明方法:

在类的方法的语句块中声明的以“self.”开头的变量都是对象变量,由对象独有!

比如下面这个例子

#!/usr/bin/env python
# -* - coding: UTF-8 -* -
#Function: Use the object var

class Person:
    def haveName(self):
      self.name = 'Michael'
    def sayName(self):
      print(self.name)

def main():
    p = Person()

    p.haveName()
    p.sayName()

main()

这里在haveName()方法中声明了一个对象变量,然后再在sayName()方法中调用。然后主程序中就会输出了!

不过建议将对象变量声明在__init__()方法中,因为对象一被创建的时候即会调用这个方法,否则的话,比如上面那个例子,如果我先调用sayName()的话,那么就会出错,说对象实例还没有name这个属性!

最后还想说的一点的就是,Python中没有private public这些关键字来标明类的变量或者方法的访问权限,但是可以通过在变量或者方法的前面加上"__"来表明这个成员是被类私有的,不能在外部调用,比如下面这个例子:

#!/usr/bin/env python
# -* - coding: UTF-8 -* -
#Function: Use the private var and func

class Person:
    __count = 0            #这个变量是私有数据成员,只能被类的方法访问,是属于类的
    def get(self):
      return(Person.__count)
    def __pri(self):
      print('Yes')

p = Person()
print(p.get())

p.__pri()
print(p.__count)

比如这里的类变量__count就是类私有的,只能被类的函数成员调用(13行),而在类外面调用(16行)就是错误的!还有那个函数成员__pri()也是私有的,在类外面直接调用(15行),也是错误的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值