标签:灵活 doc 类实例化 数位 += 函数 method 类的方法 __init__
面向对象是一种认识世界,分析世界的方法论,将万事万物抽象为类
类class
类是抽象的概念,是万事万物的抽象,是一类事物的共同特征集合
用计算机语言来描述类,就是属性和方法的集合
对象instance,object
对象是类的具象,是一个实体
一切皆对象
对象是数据和操作的封装
对象是独立的,但是对象之间可以相互作用
1.封装
2.继承
3.多态
人类就是封装;
热泪继承自动物类,孩子继承父母特征,分为单一继承,多继承,多态,继承自动物类的人类,猫类的操作吃不同
class ClassName: 语句
示例:
class MyClass: """A example class""" x = ‘abc‘ #类属性 def foo(self): #类属性foo,也是方法 return "hello world" print(MyClass.x) print(MyClass.foo) print(MyClass.__doc__)
输出为:
abc <function MyClass.foo at 0x000002091C9F3268> A example class
MyClass中,x和foo都是泪的属性,__doc__也是类的属性
foo方法是类的属性,如同吃是人类的方法,但是每一个具体的人才会吃东西,也就是说吃是人的实例才能调用的方法
foo是方法对象method,不是普通的函数对象function了,它一般要求至少有一个参数,第一个参数可以是self,这个参数位置留给self
self指当前历史本身
a = MyClass() #实例化
使用上面语法,在类对象名称后面加上一个括号,就调用类的实例化方法,完成实例化
实例化就真正的创建了一个该类的对象(实例)
示例:
tom = Person()
jerry = Person()
tom和jerry都是Person类的实例,通过实例化生成2个实例
每次实例化后获得的实例,是不同的实例,即使是使用同样的参数实例化,也得不到一样的对象
python类实例化后,会自动调用__init__方法,这个方法第一个参数必须留给self自己
MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例化后隐式调用
__init__作用是对实例进行初始化
__init__()方法不能有返回值,也就是只能return None
示例:
class MyClass: def __init__(self): print(‘init‘) print(MyClass) # 不会调用 print(MyClass()) # 调用__init__ a = MyClass() # 调用__init__
输出为:
<class ‘__main__.MyClass‘> init <__main__.MyClass object at 0x000001F030782978> init
初始化函数可以多个参数,第一个参数位置必须是self
示例:
class Person: def __init__(self,name,age): self.name = name self.age = age def showage(self): print(‘{} is {}‘.format(self.name,self.age)) tom = Person(‘tom‘, 18) jerry = Person(‘jerry‘, 20) print(tom.name, jerry.name) jerry.age += 1 print(jerry.age) jerry.showage()
输出为:
tom jerry 21 jerry is 21
类实例化后一定会获得一个对象,就是实例对象
上例中tom和jerry就会Person类的实例
__init__方法的第一参数self就是指代某一个实例
类实例化后,得到一个实例对象,会绑定方法,调用方法时会采用jerry.showage()方式
python会把方法的调用者作为第一参数self的实参传入
self.name就是jerry对象的name,name是保存在jerry对象上,而不是Person类上,称为实例变量
示例:
class MyClass: def __init__(self): print(‘self in init = {}‘.format(id(self))) c = MyClass() # 会调用__init__ print(‘c = {}‘.format(id(c)))
输出为:
self in init = 1992925063824 c = 1992925063824
上例说明,self就是调用者,就是c对应的实例对象
self这个名字只是一个惯例,可可以修改,但是不要修改,会影响代码可读性
标签:灵活 doc 类实例化 数位 += 函数 method 类的方法 __init__
原文地址:https://www.cnblogs.com/rivendare/p/9672950.html