python3中类与实例的属性小记,self的含义

最近了解python3类时,对self、类的属性、实例的属性有些迷惑,感觉python在这一块和C++还是有较大不同的。

通过下边一段程序,我把python里这一块直观理清了,记录一下。

大家可以结合本段代码更容易理解python类教程内容。如有错误 欢迎指正

#!/usr/bin/python3
# -*- coding: utf-8 -*-

class Test_Self():

    val_0 = "val_0"  #属于类的属性,要在前边定义
    #self.val_0 = "val_0"  这句话编译会报错,提示self未定义

    def __init__(self):
        self.val_1 = "self.val_1"    # 实例可以访问的属性,在__init__里定义,且需有self
        val_2 = "val_2"
        
    def func(self):
        self.val_3 = "self.val_3"
        #上句话等价于 val_3 = "self.val_3"
        val_4 = "val_4"
        print("Print in func")

    def func2():    # 个人不建议定义这样的接口!!!
        print("class static func2")
        
if __name__=="__main__":
    print(Test_Self.val_0) #val_0是属于类的属性,所以无实例化时也可通过类直接调用
    Test_Self.func2()      #func2是属于类的接口,可以直接通过类调用,类似C++的static接口,但是个人不建议Python里这么使用
    #func2()                    编译会报错,func2是类内的函数,只能通过类或实例调用
    #print(Test_Self.val_1)     编译会报错,提示Test_Self类没有属性val_1
    #print(Test_Self.val_2)     错误同上

    t = Test_Self() #实例化类的一个对象
    print(t.val_0)  #通过对象调用属于实例的属性值
    print(t.val_1)
    #print(t.val_2)     编译会报错,因为val_2是__init__函数的局部变量,不属于类的实例
    #print(t.val_3)     编译报错,val_3不属于类的实例,因为没在__init__里初始化
    #print(t.val_4)     编译报错,val_4不属于类的实例,且是func函数的局部变量
    t.func()        #通过对象调用接口
    #t.func2()          编译报错,func2定义是无参的,但通过类实例调用会默认传入self
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值