python学习(9)类与对象


1 def show(): #show() 类外的是函数 2 print("hello") 3 4 5 class Person(object): # Person:类的名称(类名)首字母必须是大写 object是所有类的父类,可以说是类的祖先 6 city="西安" # 数据属性(也叫类属性,是类中方法外的变量),只能通过类名或者类的对象来调用(Person.city或obj1.city) 7 8 #init:作用是初始化 9 #构造方法:类初始化的时候必须要对构造方法里面的实例属性赋值 10 def __init__(self,name,age): #self指的是创建的实例本身 11 #实例属性的过程(给类的实例对象带默认属性,就是这个类下创建的实例对象,都带这个属性,具体属性的内容是什么,创建实例对象的时候定义): 12 self.name=name 13 self.age=age 14 print("初始化") 15 16 def show(self): #show是Person类下的一个方法 17 print("my name is {0},and my age is {1}".format(self.name,self.age)) 18 19 def info(self,sex): #info是Person类下的一个方法 20 print("my name is {0},and my age is {1},and my sex is {2}".format(self.name,self.age,sex)) 21 22 # obj1.info(sex="nv") #如果不是默认属性,如sex,在调用的时候,就需要对这个实例对象单独再赋值 23 def method(self,*args,**kwargs): #动态参数 24 print(kwargs) 25 26 #del:作用是清理 (析构方法) 27 def __del__(self): 28 print("清理") 29 30 @property#装饰器 #特性方法 31 def getInfo(self): 32 print("我的城市:{0},我的姓名:{1}".format(self.city,self.name)) 33 @staticmethod #静态方法 34 def getName(): 35 print( "中国西安 ") 36 37 38 #类进行实例化(根据类创建出实例对象的过程)中会自动调用__init__方法,所以要对实例对象的属性进行赋值。实例化后实例对象就可以调用类下的方法: 39 obj1=Person(name="jrq",age=18) #obj1:是创建Person类的一个实例对象;也是一个变量 40 # obj2=Person(name="赵四",age=70) 41 obj1.getName() 42 # print(------------给实例对象动态绑定方法------------------) 43 # def show(): 44 # print("类之外的函数") 45 46 # obj2.show=show 47 # obj2.show() 48 49 # print(--------------给实例对象动态绑定属性----------------------------) 50 # obj2.gender="男" 51 # print(obj2.name,obj2.age,obj2.gender) 52 # print(------------------------------------------) 53 54 # obj1.getInfo 55 # print(Person(name="jrq",age="18").getName()) 56 57 58 # obj1.method(address="中国西安",country="中国") 59 60 # obj1=Person(name="jrq",age=18) #obj1:是创建Person类的一个实例对象;也是一个变量 61 # print(obj1.name) #实例属性 62 # print(obj1.age) #实例属性 63 # obj1.show() #实例方法1 64 # Person.show(obj1) #实例方法2 65 66 # print(Person.city) 67 # print(obj1.city) 68 69 # Person.getName()
所谓面向对象,其实就是说:站在上帝的视角下,世界万物一切皆对象。把拥有共同属性的归为一类,这就是class的由来。
二、类
1、类的定义:(创建类的语法)
关键字class
#object是所有类的父类,可以说是类的祖先
2、类里面有哪些东西?
类属性和方法,只有先对类进行实例化,才能调用。
2.1 类属性:
也叫数据属性,是类中方法外的变量,被该类中的所有对象所共享。

2.2 方法method(比较像之前学习过的函数)
格式:
def 方法名(self,属性)
(self表示类本身的对象。除了静态方法,别的方法都要带括号,写self。属性可写可不写。)
初始化方法:__init__
也叫构造方法(构造函数),可以写参数(图中的name、age,也可以不写)
初始化方法下,所传的属性是每个实例对象所都有的(如图的self.name和self.age)
self后可以继续写东西。下面做赋值操作:将实例对象的值赋给实例属性(self.name称为实例属性),在后面方法中可以引用初始化方法中的实例属性(写法:self.属性名),就是直接调用这一步赋了值的实例属性。

实例方法:(普通方法)
普通方法和特性方法的区别就是有没有装饰器。
例1:


例2:
如果在方法中加了自己独有的属性,在调用方法时要对这个属性进行专门赋值:(添加的属性不能写成"self.属性"这个格式,如下图format中的sex)

静态方法:(使用@staticmethod进行修饰,不允许写self)
(当某个方法不需要用到对象中的任何资源,将这个方法改为一个静态方法, 加一个@staticmethod加上之后, 这个方法就和普通的函数没有什么区别了, 只不过写在了一个类中, 简而言之, 写在类中的函数)
特性方法:(使用@property进行修饰)
特性方法,只读属性,不能写,当只想调用对象的此特性时使用。也就是说添加@property 后,这个方法就变成了一个属性。意思就是我们像调用函数的属性一样调用该方法,也就是调用的时候不加括号。


3.函数和方法的区别:
在类之外定义的称为函数,在类之内定义的称为方法。
函数可以直接调用;方法要写在类里面,先对类进行实例化,才能调用。
方法有self,函数没有。

4、类的调用顺序:(方法执行顺序)
'''
调用方法执行顺序:
1、执行构造方法
2、执行真正调用的方法
3、执行析构方法
'''
5、调用方法的两种方法:
前提:(创建对象和赋值)
对类进行实例化之后才能调用类的方法,类进行实例化就是根据类创建出实例对象,此过程会自动调用__init__方法,所以创建时要对实例对象的属性进行赋值。实例化后实例对象就可以调用类下的方法。
方法1: 实例对象名.类方法名()
方法2: 类名.类方法名(实例对象名)

(如上图obj1就是Person类的实例对象)
类名.类属性 (Person.city)
实例对象.类属性 (obj1.city)

7、引用类中的方法,写法是 “self.方法()”
引用实例属性(也就是初始化时定义的属性),写法是 “self.属性”
三、对象的创建
对象的创建又称为类的实例化
1、语法:
实例名=类名()

(如上图,创建Person类的实例对象obj)
如上图,一个Person类可以创建n多个Person类的实例对象,每个实例对象的属性值不同 。
3、动态绑定属性
在创建对象之后,对某个实例对象单独绑定属性.(只适用于当前绑定的对象)
实例对象.属性="值"

4、动态绑定方法








浙公网安备 33010602011771号