类与对象
Python是一种面向对象的编程语言。
要创建类,请使用关键字class
class MyClass: x = 5
创建一个名为p1的对象,并打印x的值
p1 = MyClass() print(p1.x)
所有类都有一个名为__init_()的函数,该函数总是在初始化类时执行。
class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person("John", 36) print(p1.name) print(p1.age)
对象也可以包含方法。对象中的方法是属于对象的函数。
class Person: def __init__(self, name, age): self.name = name self.age = age def myfunc(self): print("Hello my name is " + self.name) p1 = Person("John", 36) p1.myfunc()
self参数是对类的当前实例的引用,用于访问属于该类的变量。
它不必命名为self,您可以随意调用它,但它必须是类中任何函数的第一个参数:
# Use the words mysillyobject and abc instead of 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("John", 36) p1.myfunc()
您可以修改以下对象的属性
p1.age = 40
可以使用del关键字删除对象上的属性
del p1.age
可以使用del关键字删除对象
del p1
Python继承
创建父类
class Person: def __init__(self, fname, lname): self.firstname = fname self.lastname = lname def printname(self): print(self.firstname, self.lastname) #Use the Person class to create an object, and then execute the printname method: x = Person("John", "Doe") x.printname()
创建子类
class Student(Person): pass
使用Student类创建对象,然后执行printname方法
x = Student("Mike", "Olsen") x.printname()
添加__init_()函数时,子类将不再继承父类的_ init_()函数。
class Student(Person): def __init__(self, fname, lname): #add properties etc.
要保留父函数的__init_()函数的继承,请添加对父函数的调用
class Student(Person): def __init__(self, fname, lname): Person.__init__(self, fname, lname)
Python还有一个super()函数,它将使子类继承其父类的所有方法和属性
class Student(Person): def __init__(self, fname, lname): super().__init__(fname, lname)
通过使用super()函数,您不必使用父元素的名称,它将自动从其父元素继承方法和属性。
添加属性
class Person: def __init__(self, fname, lname): self.firstname = fname self.lastname = lname def printname(self): print(self.firstname, self.lastname) class Student(Person): def __init__(self, fname, lname, year): super().__init__(fname, lname) self.graduationyear = year x = Student("Mike", "Olsen", 2019) print(x.graduationyear)
添加方法
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)
Python迭代器
列表、元组、字典和集合都是可迭代对象。它们是可迭代的容器,您可以从中获取迭代器。
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
创建迭代器
__iter__()方法的作用类似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。 __next_()方法还允许您执行操作,并且必须返回序列中的下一项。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
为了防止迭代永远持续下去,我们可以使用StopIteration语句。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
作用域
如以上示例所述,变量x在函数外部不可用,但在函数内部的任何函数中都可用
def myfunc(): x = 300 def myinnerfunc(): print(x) myinnerfunc() myfunc()
如果需要创建全局变量,但仍停留在局部范围内,则可以使用global关键字。
Python模块
要创建模块,只需将所需代码保存在文件扩展名为.py的文件中
# Save this code in a file named mymodule.py def greeting(name): print("Hello, " + name)
现在,我们可以使用刚才创建的模块,方法是使用import语句
import mymodule mymodule.greeting("Jonathan")
模块中的变量
# Save this code in the file mymodule.py person1 = { "name": "John", "age": 36, "country": "Norway" }
import mymodule a = mymodule.person1["age"] print(a)
导入模块时,可以使用as关键字创建别名
import mymodule as mx a = mx.person1["age"] print(a)
有一个dir()函数来列出模块中的所有函数名(或变量名)
import platform x = dir(platform) print(x)
通过使用from关键字,您可以选择仅从模块导入零件。
def greeting(name): print("Hello, " + name) person1 = { "name": "John", "age": 36, "country": "Norway" }
from mymodule import person1 print (person1["age"])
您的关注,是我的无限动力!
公众号 @生活处处有BUG