Python类及其定义

我们都不会陌生面向对象语言,Python是一种面向对象的语言,但是对于初学的小白,甚至在一开始看不到和类相关的一些概念,在Python的类中是怎么定义的,比如成员变量。下面罗列几个自己在看书中存在的一些疑问。

简单的定义一个Point类,如下:

class TestPoint(object):
    defaultV = 10
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def printPoint(p):
        print 'The point is (%d, %d)' %(p.x, p.y)
    
    def anotherFunc(t):
        self.z = t
        h = t

if __name__ == '__main__':
    p1 = TestPoint(10, 29)
    p1.printPoint()
    print TestPoint.defaultV

1、成员变量在哪里?

个人认为这是Python的一个缺点,不能很直观的定义成员变量。实际上,在Python中,对象的变量隐藏在类定义的函数成员里,读者很难在第一时间关注到某个类全部的成员变量。

在上述例子中:

defaultV是类变量,直接用类名访问,python的类变量和C++的静态变量不同,并不是由类的所有对象共享。如下列代码:

inst1 = TestClass() 
inst2 = TestClass()   
print TestClass.val1 # 100 
print inst1.val1   # 100   

inst1.val1 = 1000  
print inst1.val1   # 1000 
print TestClass.val1 # 100   

TestClass.val1 =2000 
print inst1.val1   # 1000 
print TestClass.val1 # 2000   
print inst2.val1   # 2000      

inst3 = TestClass()  
print inst3.val1   # 2000
其中,val1是类变量

z不是成员变量,虽然以self.给出,但是没有在构造函数中初始化,为什么会这么用呢?

h不是成员变量,只是函数的局部变量

x,y是成员变量,为Point的两个属性,结论:在__init__构造函数中初始化的才是成员变量

2、构造函数__init__()

在初始化变量的时候,自动调用

3、self关键字

self作为函数形参,类似于C++的this,在进行函数调用时,可以不显性的写出。

4、Python中私有变量、保护变量的定义

   ①、_XXX 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。弱内部变量标示,如,当使用“from M import ”时,不会将以一个下划线开头的对象引入

   ②、__XXX 双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了,连子类也不可以,用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo ,如 self._FooBar__boo )

   ③、__xxx___ 定义的是特列方法。用户控制的命名空间内的变量或是属性,如__init__,__import__或是__file__。只有当文档有说明时使用,不要自己定义这类变量。(就是说这些是python内部定义的变量名)

参考文献:

1、Python中下划线的含义:http://blog.163.com/yang_jianli/blog/static/1619900062011627103516435/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值