Python | 类和对象
一、类与对像的创建
1. 类的组成
类属性、实例方法、静态方法、类方法
Class Student: pass
Student为类的名称,每个单词的首字母大写,其余小写
直接写在类里的变量,称为类属性
实例方法
def eat(self): print(吃)
静态方法
@staticmethoddef method(): print(staticmethod进行修饰为静态方法,不能使用self)
在类之外定义的称之为函数,在类之内定义的称之为方法
静态方法进行修饰,不能使用self
类方法
@classmethoddef cm(cls): print(classmethod进行修饰为类方法,使用cls)
init初始化方法
def __init__(self,name,age): self.name = name self.age = age
self.name称为实体属性,进行了一个赋值操作,将局部变量的name的值赋给实体变量
2. 对象的创建
对象的创建又称为类的实例化
语法:
实例名 = 类名()
意义:有了实例,就可以调用类中的内容
总结
类属性:类中方法外的变量称之为类属性,被该类的所有对象所共享
类方法:使用@classmethod修饰的方法,使用类名直接访问的方法
静态方法:使用@staticmethod修饰的方法,使用类名直接访问的方法
Student.native_pace # 访问类属性
Student.cm() # 调用类方法
Student.sm() # 调用静态方法
class Student: native_pace='安徽' @classmethod def cm(cls): print(classmethod进行修饰为类方法,使用cls) @staticmethod def method(): print(staticmethod进行修饰为静态方法,不能使用self) print(Student.native_pace) Student.cm() Student.method()
面向对象的三大属性
封装:提高程序的安全性
继承:提高代码的复用性
多态:提高代码的可扩展性和可维护性
1.封装
封装:提高程序的安全性
将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度
在python中没有专门的修饰符用于属性的私有,如果该属性不需要在类对象外部被访问,前面使用两个“_”
class Student: def __init__(self,name,age): self.name=name self.__age=age def show(self): print(self.name,self.__age) stu=Student(张三,20) stu.show() # print(stu.name) #print(dir()) # print(stu._Student__age)
年龄不希望在类的外部被调用,所以使用两个“_”
在类的外部可以通过_student__age进行访问
2.继承
语法格式:
class 字典类名(父级1,父级2):
如果一个类都没有继承任何类,则默认继承object
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print(self.name,self.age) class Student(Person): def __init__(self,name,age,stu_no): super().__init__(name,age) self.stu_no=stu_no class Teacher(Person): def __init__(self,name,age,teachofyear): super().__init__(name,age) self.teachofyear=teachofyear stu=Student(张三,20,1001) teacher=Teacher(李四,34,10) stu.info() teacher.info() 打印结果: 张三 20 李四 34
多继承
class A(object): pass class B(object): pass class C(A,B): pass
3.方法重写
如果子类对继承父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写
子类重写后的方法中可以通过super().xxx()调用父类中被重写的方法
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print(self.name,self.age) class Student(Person): #继承 def __init__(self,name,age,stu_no): super().__init__(name,age) self.stu_no=stu_no def info(self): super().info() print(学号,self.stu_no) class Teacher(Person): def __init__(self,name,age,teachofyear): super().__init__(name,age) self.teachofyear=teachofyear def info(self): super().info() print(教龄:,self.teachofyear) stu=Student(张三,20,1001) teacher=Teacher(李四,34,10) stu.info() print(-------) teacher.info()
打印结果:
张三 20
学号 1001
-------
李四 34
教龄: 10
4.object类
object类是所有类的父类,因此所有类都有object类的属性和方法;
内置函数dir()可查看指定对象所有属性;
object有一个__str__()方法,用于返回一个对于“对象的描述”,对应于内置函数str(),
经常用于print()方法,帮我们查看对象的信息,所以我们经常会对__str__()进行重写
class Student: def __init__(self,name,age): self.name=name self.age=age def __str__(self): return 我的名字是{0},今年{1}岁.format(self.name,self.age) stu=Student(张三,20) print(dir(stu)) print(stu) print(type(stu))
打印结果:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name']
我的名字是张三,今年20岁
<class '__main__.Student'>
5.多态
https://blog.csdn.net/m0_64118193/article/details/124612710