zoukankan      html  css  js  c++  java
  • 【Python】self的用法扫盲

    在Python中,我们有两个重要的概念:类与实例

    例如:我们在现实生活中人就是一个类,实例就是具体到某一个男人(张三、李四等)

    1.类:定义人这个类

    class People(object):
    	pass

    2.实例:创建实例是通过类名+()实现

    people1 = People()

    3.类就像一个模板一样,我们现在在这个模板上加一些属性:age,name,使用内置方法__init__方法

    class People(object):
    	def __init__(self,name,age):
    		self.name = name
    		self.age = age
    

    说明:①__init__方法的第一个参数永远是self,表示创建的类实例本身,在__init__内部就可以把各种属性都绑定到self,self就指向创建的实例本身 ②有了__init__方法就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传入

    #-*- coding:utf-8 -*-
    class People(object):
    	def __init__(self,name,age):
    		self.name = name
    		self.age = age
    
    
    people1 = People('Jack',23)
    
    print(people1.name)
    #运行结果:Jack
    print(people1.age)
    #运行结果:23	

    这里的self是指类本身,self.name就是类People的属性变量,是People所有。name是外部传来的参数,不是People自带的。self.name = name的意思是把外部传来的参数赋给People自己的属性变量self.name

    4.在类中定义函数时,第一参数永远是类的本身实例变量self,传递参数时不需要传递该参数

    5.类实例本身就有这些数据,那么要访问这些数据,就没必要从外部访问,直接在类中定义访问数据的函数,这样,就可以把数据“封装”起来

    #-*- coding:utf-8 -*-
    class People(object):
    	def __init__(self,name,age):
    		self.name = name
    		self.age = age
    	def print_age(self):
    		print("%s:%s" %(self.name,self.age))
    
    
    people1 = People('Jack',23)
    people1.print_age()
    #运行结果:Jack:23
    这些逻辑被封装起来了,调用起来相对容易些,但却不知道内部实现的细节。

    6.如果要让内部属性不被外部访问,那么只需要加两个下划线,就变成了私有变量,只有内部可以访问,外部无法访问。

    #-*- coding:utf-8 -*-
    class People(object):
    	def __init__(self,name,age):
    		self.__name = name
    		self.__age = age
    	def print_age(self):
    		print("%s:%s" %(self.__name,self.__age))
    
    
    people1 = People('Jack',23)
    people1.print_age()
    #运行结果:Jack:23
    使用外部访问试试I don't know smile
    #-*- coding:utf-8 -*-
    class People(object):
    	def __init__(self,name,age):
    		self.__name = name
    		self.__age = age
    	def print_age(self):
    		print("%s:%s" %(self.__name,self.__age))
    
    
    people1 = People('Jack',23)
    people1.name
    #报错:'People' object has no attribute 'name'
    people1.__name
    #报错:'People' object has no attribute '__name'
    
    
  • 相关阅读:
    ResGen.exe 生成resources文件方法 [转]
    C#【Winform】带参启动外部EXE
    SBO的5个开发原则机遇只给有准备的人[转]
    在SQL中插入临时表时使用自动增长的数据字段
    c# 强制退出
    C#实现SQL全库检索数据比较使用DataReader与DataAdapter+Datatable效率,差距惊人!
    推荐一个C#代码混淆器 .NET Reactor
    面向对象软件设计——设计模式学习
    AbstarctFactory模式——设计模式学习
    插入排序算法(直接,折半,希尔)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/8718606.html
Copyright © 2011-2022 走看看