python面向对象之类
类的定义与使用:
类的定义
类就是对象的属性和方法的封装,静态的特征称为属性,动态的动作称为方法。
类通常的语法格式如下:
class ClassName:
#属性
[属性定义体]
#方法
[方法定义体]
类的定义以关键字class开始,类名必须以大写字母开头,类名后面紧跟冒号“:”。
类的定义示例如下:
class Person: # Python的类名约定以大写字母开头
#----类的一个示例----
属性
从上例可以看出,属性就是变量,静态的特征,方法就是一个个的函数,通过这些函数来描述动作行为。
在定义类属性的时候一般用名词,定义类方法的时候一般用动词,类名约定以大写字母开头,函数约定以小写字母开头。
类定义好之后,就可将类实例化为对象。类实例化对象的语法格式如下:
对象名 = 类名()
实例化对象的操作符是:等号“=”,在类实例化对象的时候,类名后面要添加一个括号“()”。
类实例化示例:
p = Person()
上例将类Person实例化为对象p。
类的构造方法及专有方法
类的构造方法是:init(self)。
只要实例化一个对象的时候,这个方法就会在对象被创建的时候自动调用。实例化对象的时候是可以传入参数的,这些参数会自动传入__init__(self,param1,param2,…)方法中,我们可以通过重写这个方法来自定义对象的初始化操作。如下例所示代码:
运行结果如下:
狗熊,是保护动物,不能杀…
在上例中,我们重写了__init__(self)方法,如果没有重写,它的默认调用就是__init__(self),没有任何参数或只有一个self参数,所以在实例化的时候,参数是空的。在例子中,我们给了它一个参数name,就成了__init__(self,name),在实例化的时候就可以传参数了,因为第一个参数self
是默认的,就把“狗熊”传给“name”,运行程序后得到了我们期望的结果,这样使用起来就非常方便。
另外,我们还可以把传入的参数设置为默认参数,我们在实例化的时候不传入参数系统也不会报错,如下例所示代码:
替代熊,是保护动物,不能杀…
在上例中,我们把构造函数的参数name设置为默认值:“默认的熊”
对象实例化的时候没有传值给参数name,程序运行正确,输出了期望的结果:“默认的熊,是保护动物,不能杀…”,当在对象实例化的时候给参数name传值为:“替代熊”,当对象c调用方法kill()时,输出了正确的结果:“替代熊,是保护动物,不能杀…”。
大家都知道,在C++/java中,是通过关键字public、private来表明访问的权限是公有、私有的。然而在Python中,默认情况下对象的属性和方法都是公开的,公有的,通过点(.)操作符来访问,如下例所示代码:
在上例中,我们直接通过点(.)来访问了类Company的变量name,运行得到了结果:云创科技。
为了实现类似于私有变量的特征,Python内部采用了name mangling的技术(名字重整或名字改变),在变量名或函数名前加上两个下划线(“__”),这个函数或变量就变为私有了。
为了访问类中的私有变量,有一个折衷的处理办法,如下例所示代码:
运行结果如下:
在上例中,我们在类Company内部重新定义一个方法getname(self),在程序外部通过访问对象的getname()方法来访问了类Company中的私有变量:__name。
获取对象信息
类实例化对象之后,对象就可以调用类的属性和方法,语法格式如下:
对象名 . 属性名
对象名 . 方法名
对象调用类的属性或方法的操作符是:点“.”。
对象调用属性或方法的示例:
获取对象信息
在上例中,对象p分别调用了类Person的方法goroad、属性skincolor、方法sleep、属性high、属性weight。