类与对象

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

Python入门系列(七)开发常说的“累”与“对象”的更多相关文章

  1. Python 入门之 软件开发规范

    Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...

  2. Python基础教程系列目录,最全的Python入门系列教程!

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  3. Python入门系列【附】进阶教程

    如题,本篇将讲解Python提升之路:Python作为语法简单易学的语言,入门容易精通却很难,这是共识,那么为什么会有这样的共识?精通Python的难度在哪里? Python拥有简单.形象.直观的语法 ...

  4. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  5. 扩展Python模块系列(一)----开发环境配置

    本系列将介绍如何用C/C++扩展Python模块,使用C语言编写Python模块,添加到Python中作为一个built-in模块.Python与C之间的交互目前有几种方案: 1. 原生的Python ...

  6. Python入门系列(一)安装环境

    python是什么 python是一门很受欢迎的语言,除了不能生孩子以外,其它都可以做. 它擅长的领域是脚本工具和科学数据这一块,比如大数据,数据分析什么的. python安装 为了演示和验证教程可用 ...

  7. Python入门之软件开发目录规范

    本章重点: 理解在开发人标准软件时,如何布局项目目录结构,以及注意开发规范的重要性. 一.为什么要有好的目录结构 二.目录组织的方式 三.关于README的内容 四.关于requirements.tx ...

  8. Python入门系列(九)pip、try except、用户输入、字符串格式

    pip 包含模块所需的所有文件. 检查是否安装了PIP $ pip --version 安装包 $ pip install package_name 使用包 import package_name 删 ...

  9. python入门(七):字符串

    1.字符串类型: >>> s="早上好"               #str类型的字符串 >>> type(s) <class 'str ...

随机推荐

  1. Linux yum搭建私有仓库

    搭建yum仓库需要两种资源: rpm包 rpm包的元数据(repodata) 搭建好仓库后需要使用三种网络协议共享出来 http或https ftp 范例: 使用http协议搭建私有仓库 (本示例使用 ...

  2. NC20439 [SHOI2017]期末考试

    NC20439 [SHOI2017]期末考试 题目 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布.第 \(i\) 位同学希望在第 \ ...

  3. P1087 FBI树 [2004普及]

    这是个正常的.很简单的分治,然后我成功地将这个题搞成了一个贼难搞的东西 还是说一下我那个非常麻烦的思路: 1. 建树 2. 后序遍历 然后就在建树的过程中死循环了,然后还一堆毛病 看了一个AC代码,该 ...

  4. if else 还在用吗?

    当我们在使用if else 的时候,你是否闻到代码的坏味道呢? 除非非常简单的逻辑,当我们在写一大坨if else的时候,就应该审视一下是否这样写合适呢?是否这一坨代码体现某一个业务语义呢?是否体现领 ...

  5. 从入门到爱上Git

    时间不在于你拥有多少,而在于你怎样使用------时之沙 · 艾克 一.Git设置 1.1 Git全局设置 当我们安装好Git以后,我们需要对Git进行账号.邮箱的设置 设置用户信息 git conf ...

  6. abstract,抽象修饰符

    //abstract 抽象类:类由extends继承继承表现在单继承(接口可以多继承)//abstract--约束~~有人帮我们实现抽象方法,只有方法名字,没有方法实现1.不能靠new这个抽象类,只靠 ...

  7. 论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks

    13 A Data-Driven Graph Generative Model for Temporal Interaction Networks link:https://scholar.googl ...

  8. Solution -「树上杂题?」专练

    主要是记录思路,不要被刚开始错误方向带偏了 www 「CF1110F」Nearest Leaf 特殊性质:先序遍历即为 \(1 \to n\),可得出:叶子节点编号递增或可在不改变树形态的基础上调整为 ...

  9. kube-scheduler的调度上下文

    前一章节了解到了kube-scheduler中的概念,该章节则对调度上下文的源码进行分析 Scheduler Scheduler 是整个 kube-scheduler 的一个 structure,提供 ...

  10. AtCoder Beginner Contest 247 E - Max Min // 容斥原理

    原题链接:E - Max Min (atcoder.jp) 题意: 给定一个数组,求满足最大值为X且最小值为Y的区间个数. 思路:容斥原理 因为必须要包含端点,直接求是不容易的.因此考虑去求不一定包含 ...