Python之类、方法、继承
一、类
面向过程的语言:C语言
A、属性
B、方法(就是之前学习的函数)
4、
object是所有类的对象,可以说是类的祖先
类的内部的show是一个方法,self指的是类本身自己
obj:1、它是一个变量,2、它是类的对象
class Person(object):#创建类,类名称的首字母必须是大写,括号里面是类的基类
def show(self):#创建类中的函数时(self)是特殊参数,必须要写
print("hello") #函数的表达式
obj=Person()# 把类进行实例化
obj.show() # 用对象调用类Person中的函数
5、
class Person(object): def __init__(self,name,age): self.name=name self.age=age def show(self): print("my name is {0} and my age is {1}".format(self.name,self.age)) obj=Person(name="wp",age=22) # 类的实例化 obj.show()
# obj可以理解为类的对象,也可以将他理解为一个变量,所以obj可以简单的理解为给类定义的对象 # 类中实例方法调用的方式: # 第一种:对象、方法,也就是类对象调用类的方法。 obj=person(name="wp",age=22) name="wp",age=22是对实例属性赋值的过程,obj第一个对象。 obj.name()——调用方法,调用的是name的方法。 obj2=person(name="wt",age=22) name="wt",age=22是对实例属性赋值的过程,obi2第二个对象。 obj2.name()——调用方法,调用的是name的方法 #第二种:类/方法(self,参数值),此方式需要手动给 self 参数传值,也就是类名直接调用类的方法。 obj1=person(name="wp",age=22) person.name(obj1)
class Person(object): # 数据属性,只能通过类名或者类的对象调用 city="西安" def __init__(self,name,age): self.name=name self.age=age def show(self): print("my name is {0} and my age is {1},city is {2}".format(self.name,self.age,self.city)) obj=Person(name="wp",age=22) obj.show() # 对数据属性而言,使用类以及类对象调用,内存地址都是一致的 print(id(Person.city)) print(id(obj.city))
调用方法执行顺序
2、执行真正调用的方法
3、执行析构方法
class Person(object): city="西安" def __init__(self,name,age): self.name=name self.age=age print("初始化") def show(self): print("my name is {0} and my age is {1},city is {2}".format(self.name,self.age,self.city)) # 析构方法,价值:清理 def __del__(self): print("清理") obj=Person(name="wp",age=22) obj.show()
1、普通方法
如show(),info()
class Person(object): def __init__(self,name,age): self.name=name self.age=age def show(self): #封装一个查看Person属性的函数 print("name:{0} age:{1}".format(self.name,self.age)) obj=Person(name="wp",age=22) #把类Person实例化为obj obj.show() #调用方法
2、特性方法
只具备只读属性,不能写(这个方法中不能有形式参数)
调用特性方法的时候,没有括号
类内部定义的以@staticmethod装饰的函数,类方法的调用关系可以通过print后的表述得知,输出结果
# 特性方法 class Person(object): def __init__(self,name,age): self.name=name self.age=age @property #装饰器 def show(self): return "name:{0} age:{1}".format(self.name,self.age) obj=Person(name="wp",age=22) #把类Person实例化为obj print(obj.show) #调用方法
3、静态参数
理解为全局变量,但是不能等价于全局变量,静态方法的特点是使用类名来直接调用
静态方法(staticmethod)中不能够调用实例属性
@property装饰器
getInfo:获取信息
# 静态方法
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
@staticmethod #装饰器
def show():
return {"name":"wp","age":22}
print(Person.show())
三、继承
1、Java与Python的继承区别
1.1、Python是一个类可以继承N个类
1.2、Java只能继承一个类
2、概念
2.1、基类(父类):被继承的类
2.2、派生类(子类):继承其他的类
在实战中Animal是父类,Person是子类
子类继承父类的实例属性,两种方式:
第一种方式:
super().__init__(name,age)
第一种方式:
Animal.__init__(self,name,age)
self.work=work
父类继承子类的内容
1、数据属性
2、实例属性
3、方法
# 父辈继承子类方法
class Animal(object):
address="地球"
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
return "name:{0},age:{1}".format(self.name,self.age)
class Person(Animal):
def __init__(self,name,age,work):
Animal.__init__(self,name,age)
self.work=work
def show(self):
print("person中的方法")
obj=Person(name="wp",age=22,work="测试")
obj.show()# 类B中本来是没有这个方法的,但是它继承了A类,所以可以直接调用A类中的方法
4、继承的原则
1、从左到右
2、从下到上
方法重写
# 父辈信息
class Animal(object): address="地球" def __init__(self,name,age): self.name=name self.age=age def show(self): return "name:{0},age:{1}".format(self.name,self.age)
# 子辈信息 class Person(Animal): def __init__(self,name,age,work): Animal.__init__(self,name,age) self.work=work def info(self): print("来自:{0},信息:{1}".format(self.address,self.show())) def show(self): print("person中的方法") obj=Person(name="wp",age=22,work="测试") obj.show()
错误的继承方式
父类与子类在调用时,不可以同时出现在同一方法中,否则会报错