目录
1、lambda匿名函数
2、类
1、__init__()
2、继承
1、lambda匿名函数
语法 lambda arguments : expression
一个 lambda 函数,它把作为参数传入的数字加 10,然后打印结果
x = lambda a : a + 10
print(x(5)) # 15
一个 lambda 函数,它把参数 a 与参数 b 相乘并打印结果
x = lambda a, b : a * b
print(x(5, 6)) # 30
使用该函数定义来创建一个总是使所发送数字加倍的函数
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11)) # 22
2、类
1、__init__()
使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。有点类似于其他语言中的构造函数,用于给对象中的属性进行赋值操作
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def print_(self):
print(f"name = {self.name},age = {self.age}")
p1 = Person("Bill", 63)
p1.print_()
其中 self 是当前实例化的对象(不一定是self,也可以命名为this等,但是一定要有代表当前实例的引用),也即为 p1,用于访问属于该类的变量,所以 def print_(self)中的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()
同时需要注意,使用 __init__() 的不仅仅是为了对类的属性进行赋值,而且还告诉解释器,我这个类有 name 和 age 两个属性。如果不使用 __init__()进行初始化操作,则会报当前类没有该属性的错误
当然还可以使用 del 关键字删除 p1对象、p1对象的属性
2、继承
创建父类
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
x = Person("Bill", "Gates")
x.printname()
创建一个名为 Student 的类,它将从 Person 类继承属性和方法
如果您不想向该类添加任何其他属性或方法,使用 pass
关键字
现在,Student 类拥有与 Person 类相同的属性和方法
class Student(Person):
pass
x = Student("Elon", "Musk")
x.printname()
注意,当我们为子类添加 __init__() 函数时,子类将不再继承父的 __init__() 函数
子的 __init__() 函数会覆盖对父的 __init__() 函数的继承
如需保持父的 __init__() 函数的继承,必须要添加对父的 __init__() 函数的调用(不用管父类Person,只需要修改子类Student)
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
x = Student("Elon", "Musk")
x.printname()
这样,我们已经成功添加了 __init__() 函数,并保留了父类的继承
Python 还有一个 super()
函数,它会使子类从其父继承所有方法和属性
通过使用 super()
函数,不必使用父元素的名称,它将自动从其父元素继承方法和属性,包括父类的构造函数 __init__()。因此,使用super()
函数要添加对父的 __init__() 函数的调用更简单好用
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
x = Student("Elon", "Musk")
x.printname()
把名为 graduationyear
的属性添加到 Student
类,添加 year
参数,并在创建对象时传递正确的年份(不用管父类Person)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
x = Student("Elon", "Musk", 2019)
print(x.graduationyear)
把名为 welcome
的方法添加到 Student 类(不用管父类Person)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
x = Student("Elon", "Musk", 2019)
x.welcome()