python类、继承
Python 是一种面向对象的编程语言。Python 中的几乎所有东西都是对象,拥有属性和方法。类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
一、python 类
1 创建类
使用 class 关键字
实例
使用名为 x 的属性,创建一个名为 MyClass 的类
class MyClass:
x = 5
2 创建对象
现在我们可以使用名为 myClass 的类来创建对象:
实例
创建一个名为 p1 的对象,并打印 x 的值:
p1 = MyClass()
print(p1.x)
3 __init__() 函数
上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。要理解类的含义,我们必须先了解内置的 __init__() 函数。所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:
实例
创建名为 Person 的类,使用 __init__() 函数为 name 和 age 赋值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age p1 = Person("Bill", 63) print(p1.name)
print(p1.age)
注释:每次使用类创建新对象时,都会自动调用 __init__() 函数。
4 对象方法
对象也可以包含方法。对象中的方法是属于该对象的函数。让我们在 Person 类中创建方法:
实例
插入一个打印问候语的函数,并在 p1 对象上执行它:
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("Bill", 63)
p1.myfunc()
提示:self 参数是对类的当前实例的引用,用于访问属于该类的变量。
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()
修改对象属性
把 p1 的年龄设置为 40:
p1.age = 40
删除对象属性
del p1.age
删除对象
del p1
二、继承
继承允许我们定义继承另一个类的所有方法和属性的类。父类是继承的类,也称为基类。子类是从另一个类继承的类,也称为派生类。
1 创建父类
任何类都可以是父类,因此语法与创建任何其他类相同:
实例
创建一个名为 Person 的类,其中包含 firstname 和 lastname 属性以及 printname 方法:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname def printname(self):
print(self.firstname, self.lastname) # 使用 Person 来创建对象,然后执行 printname 方法: x = Person("Bill", "Gates")
x.printname()
2 创建子类
要创建从其他类继承功能的类,请在创建子类时将父类作为参数发送:
实例
创建一个名为 Student 的类,它将从 Person 类继承属性和方法:
class Student(Person):
pass
实例
使用 Student 类创建一个对象,然后执行 printname 方法:
x = Student("Elon", "Musk")
x.printname()
添加 __init__() 函数
到目前为止,我们已经创建了一个子类,它继承了父类的属性和方法。我们想要把 __init__() 函数添加到子类(而不是 pass 关键字)。
注释:每次使用类创建新对象时,都会自动调用 __init__() 函数。
实例
为Student 类添加 __init__() 函数:
class Student(Person):
def __init__(self, fname, lname):
# 添加属性等
当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
注释:子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。
如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:
实例
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
使用 super() 函数
Python 还有一个 super() 函数,它会使子类从其父继承所有方法和属性:
实例
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
添加属性
实例
把名为 graduationyear 的属性添加到 Student 类:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019
添加方法
实例
把名为 welcome 的方法添加到 Student 类:
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)
最新文章
- vc++2013中使用MySQL connector/C++ 1.1.4静态链接报错
- 关于InvokeRequired与Invoke
- tracert-命令小结
- dedecms讲解-arc.listview.class.php分析,列表页展示
- app状态监听广播
- PHP魔术方法在框架中的应用
- unsigned long类型转换为CString出现的问题
- Callable, Runnable, Future, FutureTask
- Jsp实现筛选并压缩文件批量下载
- 【转】使用Python的IDE:Eclipse+PyDev
- linux mint 五笔安装方法
- Java线程之Phaser
- 脚本两则--用于快速部署HADOOP,SPARK这些(特别是VM虚拟机模板部署出来的)。。
- 第八章: IO库
- ViewTreeObserver简介
- CSS中的特殊性、继承、层叠
- Direct3D 使用质地
- Define Constraints That Are Minimal and Sufficient 设定不多不少的约束
- js模拟静态方法
- Django web框架