python-类和对象

34 阅读3分钟

1.类的定义

Python使用class关键字定义一个类,语法如下:

class 类名:
    属性1
    属性2
    ...
    方法1
    方法2
    ...

代码案例如下

class Student:  
    name = '张三' #定义属性  
    age = 18     #定义属性  
    def eat(self): #定义方法  
        print("{}岁的{}一天吃三斤米饭".format(self.age,self.name)) #format格式化输出  
s = Student() #创建学生类的实例  
s.eat() #通过实例调用类的方法

2.通过构造方法,在实例化对象时就可以传入参数,来赋值属性。

构造方法__init__(self,...)
代码案例如下

class Student:  
    def __init__(self,name,age):  
        self.name = name  
        self.age = age  
    def eat(self): #定义方法  
        print("{}岁的{}一天吃三斤米饭".format(self.age,self.name)) #format格式化输出  
s = Student('张三',18) #创建学生类的实例并通过构造方法给属性赋值  
s.eat() #通过实例调用类的方法

3.私有属性和公有属性

在python中,没有关键字来定义私有和公有属性。在变量名或函数名前面加上 “__” 两个下划线,那么方法或变量就变成私有的了,可以通过对象名._类名_变量名,直接访问私有变量和函数。
代码案例如下

class Student:  
    def __init__(self,name,age):  
        self.__name = name             #定义私有属性  
        self.age = age  
    def __eat(self):                   #定义私有方法  
print("吃三斤米饭")  
s = Student('张三',18)                 #创建学生类的实例并通过构造方法给属性赋值  
s._Student__eat()                      #调用私有方法  
print(s._Student__name)                #调用私有属性

4.继承

如果要编写的类是另一个现成类的特殊版本或者说细化版本时或者扩展版本时,可使用继承。原有的类称为父类,而新类称为子类。子类继承其父类的所有属性和方法,同时还可以定义自己的属性和方法。
语法如下:

class 类名1:
    方法1
    ...
class 类名2(类名1):  #这里的类名1就是指类名2的父类
    方法1
    ...

代码案例如下

class Human:  
    def __init__(self,name,age):  
        self.name = name  
        self.age = age  
    def eat(self):  
        print("{}岁的{}吃了三斤米饭".format(self.age,self.name))  
class Student(Human):                                           #继承Human类  
    def __init__(self,name,age,hobby):  
        super().__init__(name,age)                              #调用父类init方法给父类属性赋值  
        self.hobby = hobby  
    def eat(self):                                              #重写父类eat方法  
        print("{}的{}吃了三斤米饭".format(self.hobby,self.name))  
s = Student("张三",18,"喜欢吃米饭的")                            #实例化Student类并用构造方法传参  
s.eat()                                                         #这里调用的是重写后的方法

特别注意:当子类继承父类的属性和方法后,若子类没有重写 init(self) 这个构造方法时, 实例化一个子类,父类的__init__(self)会自动执行
代码案例

class Human:  
    def __init__(self):  
        print("Human类的方法被调用")  
class Student(Human):  
    def fun(self):  
        print("Student类的方法")  
s = Student()

执行这段代码会在控制台输出Human类的方法被调用

5.多继承

继承多个类,代码案例如下

class Human:  
    def HumanFun(self):  
        print("Human类的方法")  
class Man:  
    def ManFun(self):  
        print("Man类的方法")  
class Student(Human,Man):   #同时继承Human和Man类
    def __init__(self):  
        print("我只用父类的")  
s = Student()  
s.ManFun()  
s.HumanFun()

由于Student类没有重写父类的方法,所以在控制台输出的是Human类的方法Man类的方法,也表明了这里的多继承是没问题的