关于类的一点小收获

'''
下面我们来探究"面向对象编程"这个神奇的东西
面向对象编程,顾名思义,就是针对某一类型的对象进行一个类的操作
与之相对的就是面向过程编程
比如说,我要实现一个操作,我就写一段代码来实现这个操作,也就是
为了实现这个单一的过程,而不是针对一类相似的对象
'''
'''
方法__init__(),类中的函数叫做方法,__init__函数,每当你在根据
某个类创建新实例时,就会调用这个函数,也就是初始化实例对象.
__init__(self,arg1,arg2,....,argn)
其中self所代表的就是我们创建的实例对象,每个与类相关联的方法的方法
都会自动传递实参self,他是一个指向实例本身的引用,让实例能够访问类中
的属性和方法.以self为前缀的变量都可供类中的所有方法使用,我们可以通过
类的任何实例来访问这些变量.self.name=name获取储存在形参name中的值,
并将它们存储在变量name中,然后该变量被关联到当前创建的实例.
'''
'''
 
class Dog():
def __init__(self,color,age):
self.color=color
self.age=age
def bark(self):
print('the dog is barking')

 



my_dog=Dog('white',6)
如何访问我们新建立的实例的内容呢?
这时我们就可以用句点表示方法来建立了.比如说
my_dog.age这样我们就可以提取到my_dog这个实例当中的对象了
'''
'''
现在讨论如何调用类中的方法呢?
我们可以通过句点表示法来调用类中的方法了
比如说my_dog.bark()这样就可以调用其中的方法了
'''
'''
给属性指定默认值,类中的每个属性都必须有初始值,哪怕这个值是
0或者空字符串,那么有的时候我们需要为某些类的对象提供初始值,现在我们就来探究
究竟该怎么做才能实现这样的操作
 1 class Car():
 2 def __init__(self,make,model,year):
 3 self.make=make
 4 self.model=model
 5 self.year=year
 6 self.odometer=0
 7  
 8 def read_odometer(self):
 9 print("This car has"+str(self.odometer_reading)+"miles on it")
10 def update_odometer(self,mileage)
11 self.odometer=mileage

 

这样我们就给了Car中每一个被创建的实例一个odometer=0的初始值
'''
'''
当然,有的时候我们是需要修改初始值的,那么该怎么办呢?
下面我们介绍三种方法
1:直接修改属性的值
my_newcar=Car('audi','a4',2016)
my_newcar.odometer=23
这样我们就修改成功了!
2:通过方法修改属性的值:
my_newcar.update_odometer(26)
这样我们就成功的修改了我们所要修改的值
3:通过方法对属性进行递增:
比如说我们再向类中添加一个方法
def increase_odometer(self,mile):
odometer+=mile
这样,my_newcar.increase_odometer(25)
就会在原来的基础上再添加25到odometer中
'''
'''
我们来讲一个很有趣的性质---继承
有时候我们需要写一个和已有的class相似的类 但是我们又不想把代码再敲一遍
这时候继承就派上用场了
我们只需要输入 class Audicar(Car):
这样我们的新类 Audicar中就能完整的继承Car中的方法和属性
原来的类叫做父类 现在的类叫做子类 子类中也可以定义只属于子类的方法和属性
我们在创建子类时,父类必须包含在当前文件中,而且位于子类前面
父类的构造方法不会被自动调用,需要在子类的构造方法中专门调用
在调用父类的方法时需要加上父类的类名前缀,并且带上self参数变量 区别在于类中调用普通函数是不需要带self参数
在python中,首先查找对应类型的方法,如果在子类中找不到对应的方法,才到基类中逐个查找
所以当然,我们就可以重写父类的方法,这样不会覆盖掉父类的方法也不会影响其他继承同一父类的子类的调用
此外,子类不能调用父类中的私有方法
我们发现还可以将实例作为属性来调用
示例如下
'''
 1 class Battery():
 2 def __init__(self,battery_size=70):
 3 self.battery_size=battery_size
 4  
 5 def describe_battery(self):
 6 print("This car has a "+str(self.battery_size)+"-kWh battery.")
 7  
 8 class ElectricCar():
 9 def __init__(self,make,model,year):
10 self.battery=Battery()
11 self.make=make
12 self.model=model
13 self.year=year
14 my_tesla=ElectricCar('tesla','model s',2016)
15 my_tesla.battery.describe_battery()

 

'''
需要注意的是,我们在这里battery是作为Battery类的一个实例存在的
所以如果想要调用Battery中的方法,我们就需要在实例中再调用实例
所以书写要像上边一样my_tesla.battery.fun_name()才能够成功的引用到Battery类中的函数
'''

 

posted @ 2018-04-02 19:57  小母牛下山  阅读(273)  评论(0)    收藏  举报