面向对象:
类class:
类是抽象的概念,是一类实物共同特征的集合.
计算机语言来描述类:属性(数据)和方法(动作).
对象instance,object
对象是类的具象,是一个实例
就像:每个人都是人类的个体,每个人都是抽象概念'人类'的不同的实例
举例:你吃鱼
类对象:类的定义就会生成一个类对象
类的属性:类定义中的变量和类中定义的方法都是类的属性
类变量:x是类MyClass的变量
MyClass中,x,foo都是类的属性,__doc__也是类的属性
foo方法是类的属性
foo是 method方法对象,不是普通的函数对象function了,它必须至少有一个参数,且 第一个参数必须是self(self也可以换名字), self指代当前实例本身
实例化:
__init__方法:
MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义,会在实例化后隐式调用,作用是对实例进行 初始化
类class:
类是抽象的概念,是一类实物共同特征的集合.
计算机语言来描述类:属性(数据)和方法(动作).
对象instance,object
对象是类的具象,是一个实例
就像:每个人都是人类的个体,每个人都是抽象概念'人类'的不同的实例
举例:你吃鱼
你,就是对象; 鱼,也是对象; 吃是动作
一切皆对象
对象是数据和操作的封装
对象是独立的,但是对象之间可以相互作用
面向对象的三要素:
1.封装:把属性和操作组装在一起
2.继承:多继承少修改
3.多态:
定义类:
class ClassName:
(语句块)
1.必须使用class关键词
2.类名使用大驼峰命名
3.类定义完成后,就产生了一个类对象,绑定到了ClassName上
举个小栗子:
class MyClass: '''A example class''' x = 'abc' #类属性 def foo(self): #类属性foo,也是方法 return 'My Class' print(MyClass.x) #打印结果 abc print(MyClass.foo) #打印结果 <function MyClass.foo at 0x000000CFD7A501E0> 函数对象对应的内存地址 print(MyClass.__doc__) #打印结果 A example class类对象和类属性
类对象:类的定义就会生成一个类对象
类的属性:类定义中的变量和类中定义的方法都是类的属性
类变量:x是类MyClass的变量
MyClass中,x,foo都是类的属性,__doc__也是类的属性
foo方法是类的属性
foo是 method方法对象,不是普通的函数对象function了,它必须至少有一个参数,且 第一个参数必须是self(self也可以换名字), self指代当前实例本身
实例化:
class MyClass: x = '123' def foo(self): print(self.x) a = MyClass() #实例化,初始化 print(a.x) print(a.foo())a = MyClass()初始化后,a传给self,访问类的属性
__init__方法:
MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义,会在实例化后隐式调用,作用是对实例进行 初始化
class MyClass: x =123 def __init__(self): #初始化 print('init') a = MyClass() #会调用__init__ print(a.foo())
小例子1:
class Person: x = 'abc' def __init__(self,name): self.name = name a = Person('tom') b = Person('jerry') print(a.name, b.name) #打印结果 tom jerrya和b会传入self中,调用self.name = name (后边的name为形参,由a和b传入实参)
小例子2:
class Person: x = 'abc' #类的属性 def __init__(self,name): self.name = name #self.name中的name是实例的属性 a = Person('tom') b = Person('tom') print(a.name, b.name) #打印结果tom tom print(a.x,b.x) #abc abc a和b调用Person类中的x属性 print(a == b) False print(a is b) False 即便是赋相同的name值,但是a和b是不同的两个实例
小例子3:
class Person: x = 'abc' def __init__(self,name,age=18): self.name = name self.y = age a = Person('tom') b = Person('jerry',20) print(a.name, b.name) #打印结果tom jerry print(a.y,b.y) #打印结果18 20 ,默认参数为18,b给age赋值为20
class Person: x = 'abc' def __init__(self,name,age=18): self.name = name self.y = age def show(self): print(self.name,self.y) a = Person('tom') b = Person('jerry',20) a.show() #tom 18 b.show() #jerry 20
外部修改实例变量的值:
class Person: x = 'abc' def __init__(self,name,age=18): self.name = name self.y = age def show(self): print(self.name,self.y) a = Person('tom') b = Person('jerry',20) b.y = 30 #在外面更改b的y值 b.show() #打印结果jerry 30