一 python自动化基础能力:3.python基础上之数据类型,函数(16)

class 类名([父类]):公共属性#对象的初始化方法__init__(self,...):...#其他的方法def method(self,...):...
要求:尝试定义一个车的类 。
class Car():'''属性:name、color方法:run()、didi()'''def __init__(self,name,color):self.name = nameself.color = colordef run(self):print('Car in running...')def didi(self):print('%s didi'%self.name)c = Car('daben','white')print(c.name,c.color)c.run()c.didi()
打印
daben whiteCar in running...daben didi
定义对象时,希望对象能发挥一些作用,应该保证数据的安全性和有效性,
class Car():'''属性:name、color方法:run()、didi()'''def __init__(self,name,color):self.name = nameself.color = colordef run(self):print('Car in running...')def didi(self):print('%s didi'%self.name)c = Car('daben','white')#修改属性c.name = 'aodi'print(c.name,c.color)c.run()c.didi()
结果就会改变
aodi whiteCar in running...aodi didi
要增加数据的安全性,要做到:
1.属性不能随意修改,有确实要改的需要才改,没有真实的需要才改;
2.属性不能改为任意的值,要保证有效 。
7.封装
封装是面向对象的三大特性之一(另外两个是继承、多态) 。
封装指的是隐藏对象中一些不希望被外部访问到的属性和方法 。
class Dog:def__init__(self,name):self.name = named = Dog('erha')d.name = 'kaisa'print(d.name)
打印kaisa
此例中name属性即未被隐藏,会被任意修改 。
如何修改对象中的一个属性:
将对象的属性名修改为外部不知道的名字 。
class Dog:def__init__(self,name):self.hidden_name = namedef speak(self):print('Hello,I\'m %s'%self.hidden_name)d = Dog('erha')d.name = 'kaisa'd.speak()
打印Hello,I'm erha
此时不能修改,要想修改,
class Dog:def__init__(self,name):self.hidden_name = namedef speak(self):print('Hello,I\'m %s'%self.hidden_name)d = Dog('erha')d.hidden_name = 'kaisa'd.speak()
打印Hello,I'm kaisa,这又不是封装,成了最初的形式 。
如何获取(修改)对象当中的属性:
通过提供()和()方法来访问和修改属性 。
class Dog:def__init__(self,name):self.hidden_name = namedef speak(self):print('Hello,I\'m %s'%self.hidden_name)def get_name(self):#获取对象的属性return self.hidden_namedef set_name(self,name):#修改对象属性self.hidden_name = named = Dog('erha')print(d.get_name())d.set_name('kaisa')print(d.get_name())d.speak()
打印
erhakaisaHello,I'm kaisa
使用封装确实在一定程度上增加了程序的复杂性,
但是它确保了数据的安全性:
1.隐藏了属性名,使调用者无法任意修改对象中的属性 。
2.增加了和方法,可以很好地控制属性是否是可读的:
如果希望属性是可读的,则可以直接去掉方法;
如果希望属性不能被完结访问,则可以直接去掉方法 。
3.使用方法设置属性,可以增加数据的验证,确保数据的值是正确的 。