python学习笔记(九) -- 类、实例、私有属性

如果接触过java这块非常容易理解

 

类  -- 对事物或生物的抽象是一个模板

类里面有属性,有方法,打个比方。类代表人类,类里面的属性就好比人的五官,四肢,就是每个人都会有,方法就好比人的动作,比如吃饭,喝水。但是为什么说类是一个模板的,因为人有一些共有的东西,就像上面说的,但是每个人又不一样,比如人的模样,身材,吃的多少等等。

实例  -- 通过类可以创建实例

通过一个类可以创建出一个实例,实例就代表具体的每一个人,创建实例的时候我们可以给里面的属性赋值。

私有属性

属性是在类的内部定义的,我们创建一个类的实例,就可以调用到类的属性,有时候我们不想让别人通过类的实例获取或修改类的属性,我们则需要将属性私有化,方法就是在属性名前面加上两个下划线。

也有一种情况,就是我们怕别人通过  实例.属性名  = 某个值  这种方式给实例的属性传递一些垃圾数据,我们通过将属性私有化,然后定义一个函数,调用者通过调用这个函数可以给属性赋值,但是在函数内部会写一些业务逻辑,来防止垃圾数据的注入。

下面用代码来说话


#类的定义
>>> class Student(object):  #定义一个类Student 小括号代表Student继承的类,一般没有要继承的类都写Object,所有的都会继承Object
	def __init__(self,name,score): #这个函数名必须固定,用来给类里面的属性赋值,类似于java的有参构造方法,其中self也是固定的,代表当前创建实的引用
		self.name = name  #python类中的变量不是像java中那样单独定义出来的,而是通过这种形式进行绑定(self.属性名)
		self.score = score

#对象的创建		
>>> bart = Student('Bart Simpson',59)#这样就可以创建出一个实例,bart为实例的引用
>>> bart.name  #实例.属性名 就可以获得属性值
'Bart Simpson'
>>> bart.score
59
>>> class Student(object): #在类中也可以定义一个普通函数
	def __init__(self,name,score): #这是一个绑定属性的函数
		self.name = name
		self.score = score
	def toString(self):  #普通函数,我们让它打印出类的属性值
		print("name : %s , score: %d" % (self.name,self.score))

		
>>> 
>>> a = Student('zzh',100) 
>>> a.toString()   #调用方法
name : zzh , score: 100
>>> a.name
'zzh'
>>> a.score
100





#私有属性
>>> class Student(object):  #如果我们不想让类的调用者直接拿到类的属性,我们只需要在属性名前加上两个下划线
	def __init__(self,name,score):
		self._name = name  #name前面我加了一个下划线为了测试
		self.__score = score  #score前面加了两个下划线 
	def toString(self):
		print("name : %s , score: %d" % (self._name,self.__score))

>>> a = Student('zzh',100)
>>> a._name  #加了一个下划线的属性还是可以直接被调用到
'zzh'
>>> a.__score #加了两个下划线的调用会报错,提示没有这个属性
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    a.__score
AttributeError: 'Student' object has no attribute '__score'
>>> a._Student__score #但其实也可以通过这种方式调用到,实际上python将变量名前面加上了_类名,但是每个版本的python更改名字的方式并不是都一样
100
>>> a.__score = 10 #这里看似可以给私有属性赋值
>>> a.toString()  #打印出来的时候发现属性值并未改变,还是上面说的,这个score实际上名字已经变为_Student__score 了,我们上面只是在类外部又给一个实例绑定了一个属性
name : zzh , score: 100
>>> a.__score #通过打印可以验证上面所说的
10






#下面演示通过 设置私有变量 然后提供一个方法来修改变量 达到防止脏数据注入的目的
class Student(object):
	def __init__(self,name,score):
		self.__name = name
		self.__score = score
	def toString(self):
		print("name : %s , score: %d" % (self.__name,self.__score))
	def set_score(self, score):
		if 0 <= score <= 100:
		    self.__score = score
		else:
		    raise ValueError('bad score')

		
>>> a = Student('zzh',100)
>>> a.toString()
name : zzh , score: 100
>>> a.set_score(1111)
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    a.set_score(1111)
  File "<pyshell#31>", line 11, in set_score
    raise ValueError('bad score')
ValueError: bad score

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值