一些Python的知识点(非报错及其解决方法)
啥是面向对象(OOP)
面向对象三要素封装、继承、多态
封装: 确标识出允许外部使用的所有成员函数和数据项,或者叫接口。有了封装,就可以区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者。
继承: 继承有两种含义:其一是继承基类的方法,并做出自己的改变和/或扩展——解决了代码重用问题;其二是声明某个子类兼容于某基类(或者说,接口上完全兼容于基类),外部调用者可无需关注其差别
多态: 基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同
init() 函数
所有类都有一个名为 __init__()
的函数,它始终在启动类时执行。
使用 __init__()
函数将值赋给对象属性,或者在创建对象时需要执行的其他操作,每次使用类创建新对象时,都会自动调用 init() 函数。
比如根据class Person
创建一个名为 p1
的对象:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Bill", 63)
print(p1.name)
print(p1.age)
self
参数
self
参数是对类的当前实例的引用,用于访问属于该类的变量。它不必被命名为 self,可以随意调用,但它必须是类中任意函数的首个参数。比如,用 mysillyobject
和 abc
代替 self
:
class Person:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
p1 = Person("Bill", 63)
p1.myfunc()
子类的继承
# 创建父类
class Person:
# init父类
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
# 父类中添加方法
def printname(self):
print(self.firstname, self.lastname)
# 创建子类
class Student(Person):
# 子类中init会覆盖掉原本父类的init,在这里加入了一个新的year参数
def __init__(self, fname, lname, year):
# super代表子类会继承父类所有熟悉和方法
super().__init__(fname, lname)
self.graduationyear = year
# 在子类中定义一个新的方法 welcome
def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
# 子类实例化为x
x = Student("Elon", "Musk", 2019)
x.welcome()