1.理论:
数据成员/成员属性:就是类中的变量。
对象:对象包括数据成员和方法。
类的方法:在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含形式参数 self, 且为第一个参数。
实例化:创建一个类的具体对象。
类属性:即直接在类中定义而不是在方法中定义的属性。
self:self 代表类的实例。
实例属性:即在类的方法中通过self.xxx定义的属性。
私有属性:主要用途是封装,即隐藏类的内部实现细节,防止外部直接访问或修改敏感数据,从而增强代码的安全性和可维护性。私有属性可以通过类内方法间接访问或者强制访问。
局部变量:定义在方法中的变量,仅支持方法内部访问,在方法调用时创建,调用结束时销毁,可以与方法外部变量同名而不冲突。
类(Class): 相同类型的对象通过分类和抽象后得出共同的特征和行为而形成类。它允许你创建自定义的数据结构,包含数据和数据操作方法。创建一个类之后,可以通过类名访问其类属性。
面向对象编程:它的关键是如何合理地定义和组织类以及类之间的关系。面向对象编程能够更好地支持代码复用和设计复用。
构造方法:类有一个名为'init()'的特殊方法(构造方法),该方法在类实例化时会自动调用,可以接收参数,它的第一个参数必须是'self',代表实例对象本身,如果没有定义'init',Python会提供一个默认的空构造方法,构造方法不应该返回任何值(除了None)。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
多继承:类的继承机制允许多个基类。要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python会从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
2.实操:
2.1. 类和私有属性定义
class People:
name = '' #类属性
age = 0
__weight = 0 #定义私有属性
def __init__(self, n, a, w):
self.name = n #实例属性
self.age = a
self.__weight = w
def speak(self):
print("%s说:我今年%d岁,体重%dkg"%(self.name, self.age, self.__weight))
c = People('小王', 23, 66) #实例化
c.speak()
# c.name或People.name访问类属性
#print(c.__weight) #不能直接访问私有属性,否则会报错:AttributeError
结果:
![]()
2.2. 类的单继承和方法重写
类属性会自动继承,而实例属性需要调用父类的__init__方法才能继承
class Parent:
def method(self):
print("调用父类")
#定义子类
class Child(Parent):
#方法重写
def method(self):
print("调用子类")
c = Child()
# c.method()
super(Child, c).method()#用子类对象调用父类已被覆盖的方法
结果:
![]()
2.3. 类的多继承
定义结构如下: class DerivedClassName(Base1, Base2, Base3): statement_1 . . . statement_n
#父类定义
class people:
name = ''
age = 0
__weight = 0
def __init__(self, n, a, w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s说:我%d岁,体重%dkg"%(self.name, self.age, self.__weight))
#另一个父类
class speaker:
topic = ''
home = ''
def __init__(self, h, t):
self.home = h
self.topic = t
def speak(self):
print("我来自%s,我演讲的主题是%s"%(self.home, self.topic))
#多继承
class sample(people, speaker):
def __init__(self, n, a, w, h, t):
#同时继承两个父类的构造函数,然后下面不指定是谁的speak(),观察最终调用的是哪个基类的方法
people.__init__(self, n, a, w)
speaker.__init__(self, h, t)
#实例化
test = sample('tom', 23, 66, 'China', 'python')
#继承基类的公共成员方法,两个基类都有speak()方法,而下面未指定,则默认调用括号中排在前面的基类的
test.speak()
结果:
6183

被折叠的 条评论
为什么被折叠?



