目录
- 前言
- 一、创建类
- 二、创建对象
- __init__函数
- 三、对象方法
- self参数
- 四、对象属性修改
- 五、继承和多态
- 六、多态
前言
Python 是一种面向对象的编程语言。
Python 中的几乎所有东西都是对象,拥有属性和方法。
类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
继承允许我们定义继承另一个类的所有方法和属性的类。
父类是继承的类,也称为基类。
子类是从另一个类继承的类,也称为派生类。
一、创建类
使用class关键字:
class person:
pass
class Person(object):
pass
这样两个简单的类就创建好了,其中object参数可要可不要。
二、创建对象
现在使用名为person的类创建对象p1:
class Person:#创建person类
def __init__(self,name):
self.name = name1#创建name属性
p1 = Person("Bill")#创建p1对象
print(p1.name)
1.__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__函数
三、对象方法
对象也可以包含方法。对象中的方法是属于该对象的函数。
在 Person 类中创建方法:
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()#调用myfunc方法
注:self 参数是对类的当前实例的引用,用于访问属于该类的变量。
1.self参数
它不必被命名为 self,可以随意调用它,但它必须是类中任意函数的首个参数:
class Person:
def __init__(my, name, age):
my.name = name
my.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
p1 = Person("Bill", 63)
p1.myfunc()
四、对象属性修改
如:
class Person:
def __init__(my, name, age):
my.name = name
my.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
p1 = Person("Bill", 63)
p1.age = 64#输出为64
print(p1.age)
del p1.age#进行删除属性
print(p1.age)
del p1#对象删除
print(p1)
五、继承和多态
既然是继承,那肯定有父类和子类,子类继承父类的东西,任何类都可以是父类,所以语法创建并没有什么不同。
创建父类:
创建一个名为 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()
创建子类:
如要继承父类,在创建子类时将父类作为参数发送。
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):#父类为参数
pass
x = Student("Elon", "Musk")#继承了父类,参数就与父类相同
x.printname()
添加__init__函数:在子类中添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。
如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)#这里的参数要注意
super().__init__(fname,lname)#使用super函数与上行意思一样,参数中无self
x = Student("Elon", "Musk")
x.printname()
也可以在子类中添加属性:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year#添加父类没有的属性
x = Student("Elon", "Musk", 2019)#参数要补全
print(x.graduationyear)
除属性外,还可以添加方法。
多态简单理解就是同一类的东西有不同的属性,比如说,车子,车子有汽车,公交车等,他们有相同的地方也有不同的,当人去开车时,只需要调用某一种车就行,不必写一百种车子的类型,用哪一种就调用哪一种(太麻烦),下面有一道简单题目:使用多态实现28路、906路、B32路公交车的驾驶方法并打印
class Rode:
def __init__(self, name):
self.name = name
def method(self):#定义驾驶方法
print(self.name + "的驾驶方法是。。。。。。")
class vehicle:
def way(self,name):
print("这一路公交车的驾驶方法:")
name.method() #就是把name调用的类引进来,实现任何name都可以用
# Rode("rode-28").method() 此行与上行意思相同
person = vehicle()
rode_28 = Rode("rode-28")#创建对象,传入28路公交车的参数
person.way(rode_28)#使用对象人来知道车的驾驶方法
print("*"*30)
rode_906 = Rode("rode-906")#创建对象,传入906路公交车的参数
person.way(rode_906)
print("*"*30)
rode_b32 = Rode("rode-b32")#创建对象,传入b32路公交车的参数
person.way(rode_b32)
六、对象属性和类属性
类属性:不同于对象属性
class person:
name = "person1"#这里的属性实际上属于类属性(用类名来调用)
def __init__(self,name):
self.name = name#对象属性,对象来调用
print(person.name)#输出的是person1
per = person("小明")
print(per.name)#输出的是小明
print(person.name)#输出的是person1
其中当类属性与对象属性重名时,对象属性优先级高于类属性,若无对象属性则使用类属性。
动态的添加属性:(只针对当前对象生效,对于类创建的其他对象无用)
class person:
name = "person1"#这里的属性实际上属于类属性(用类名来调用)
def __init__(self,name):
self.name = name#对象属性,对象来调用
print(person.name)#输出的是person1
per = person("小明")
print(per.name)
per.age = 18
print(per.age)
per2 = person("李四")
print(per2.age)#报错