as火柴人

导航

类,实例

8.1,类

1.   self 是用来自动传递的,不用赋值;

  self为前缀的变量可以供类中的所有方法使用;

  每一个和类相关联的方法都会调用self,这样实例才可以访问类中的属性和方法;

       在类中调用属性,用self.属性,否则就会报错;在实例中调用属性用实例名.name(这个过程是先找到实例再找属性。)

   self.name=name:在传递参数的时候,self的作用是关联实例。

   错误:class是小写,init,是class不是def,类里面的方法调用:self. 类里面的括号(self)

2.  类里面的非默认属性

    对于非默认属性,并不在_init_()的括号里面指定,而是在类的构造函数体内指定,需要赋初始值

     改变非默认属性值:

  1. 实例化赋值,这里的赋值不再和普通参数一样,这里是用实例.属性=来赋值;有点像类变量和实例变量。这里的必须要传递的参数写在Init里面,不是必须要传递的写在构造函数体内,实例化的时候用等号赋值进去一个值。所以这个值随时都能改,不安全。(像类变量?)
  2. 写一个方法;属性还是要先在Init函数体内定义,这个方法要调用已经定义的属性。传入参数。然后赋值
  3. 递增

     写一个方法:

class Car():

--snip-
def update_odometer(self, mileage):

""" 将里程表读数设置为指定的值 禁止将里程表读数往回调 """if mileage >= self.odometer_reading:

      self.odometer_reading = mileage else:

    ❷ print("You can't roll back an odometer!")

 

  类里面的函数,定义都跟正常函数一样,同样是需要有参数,这里如果使用了类定义的属性,就要用self,类里面的方法没有return 也是不能返回结果的、

8.2,子类继承

    创建子类时,父类必须包含在当前文件中,且位于子类前面

   方法__init__() 就是普通的构造函数。

   super() 是一个特殊函数帮助Python将父类和子类关联起来,用来继承父类所有的属性。而且要放在init函数里面

 

class ElectricCar(Car):      
    """电动汽车的独特之处"""def __init__(self, make, model, year):          
"""初始化父类的属性"""
 ❹         super().__init__(make, model, year)



      子类的重写:可在子类中定义一个这样的方法,即它与要重写的父类方法同名。

8.4 实例用作属性

  当类里面的属性和方法过多,过于杂乱,可以将一些方法提取成一个类。

  实例作为属性的声明:self.属性=实例()

  A作为B的属性:B想用A里面的属性和方法:self.属性a=A()  B.a.方法名()    这里是属性a不是实例A

   问题:如果这个作为属性的实例需要传参数该怎么传。直接在实例作为属性的时候就传递了参数

   为什么一定是B.a.方法名()。因为要调用a里面的方法才有意义,不然用a的__int__函数没有意义

    


经常的错误:

  实例名使用多了错写成类名

 __init__函数里面出来属性定义不要做别的处理。

 

  使用非定义属性时前面不加前缀self

 

posted on 2018-11-07 11:28  as火柴人  阅读(159)  评论(0)    收藏  举报