• Python入门系列(七)开发常说的“累”与“对象”


    类与对象

    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

  • 相关阅读:
    十字光标太小怎么调节、CAD梦想画图算量技巧
    ffplay源码分析—数据结构
    warning C4819最简单解决办法
    基于Java的私人牙医诊所(医院)系统
    QRunnable与外界互传对象
    [LeetCode解题报告] 30. 串联所有单词的子串
    集成crawlergo和xray的src漏洞挖掘利器(hscan)
    OneNote如何修改已有的笔记本为默认的快速笔记?
    优化收益与用户体验:游戏APP需接入的广告类型
    高阶运维管理,这个工具和思路值得看看
  • 原文地址:https://www.cnblogs.com/bugs-in-life/p/16645690.html