Python面向对象
Posted kubernets
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象相关的知识,希望对你有一定的参考价值。
Python面向对象编程
类
类与对象的区别
类是客观世界中的事物的抽象,比如人类、球类
对象是类实例化的实体,比如足球,篮球
实例说明:
球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来(实例化就是创造对象)
类的创建格式:
class ClassName:
类的内容
class Fruit:
def __init__(self): ###__init__为类的构造函数
self.name = name ### 类的属性
self.color = color
def grow(self): ###定义grow函数,在类中函数称为方法
print "Fruit grow"
**类的方法必须有一个self参数,在方法调用时,可以不传递这个参数
方法:类中定义的函数
属性:类中的定义的变量
类的实例化
根据类来创建的对象的称为实例化
class Dog():
def __init__(self,name,age):
self.name = name
self.age = age
def sit(self): ##类的方法
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rollwd over!")
my_dog = Dog(‘willie‘,‘6‘) ###类的实例化
print("My dog‘s name is " + my_dog.name.title() + ‘.‘)
print("My dog is " + str(my_dog.age) + " years old." )
结果:
My dog‘s name is Willie.
My dog is 6 years old.
调用方法
将类实例化后,可以通过句号表示法来调用类中定义的方法
my_dog.sit()
my_dog.roll_over()
结果:
Willie is now sitting.
Willie rolled over!
类的属性
类的属性按使用范围可以分为共有属性和私有属性,类的属性范围取决于属性的名称
公有属性: 在类中和类外都能调用的属性
私有属性: 不能再类外及类以外的函数调用的属性
定义方式:以"__"双下划线开始的成员变量就是私有属性
实例:
#!/usr/bin/python
class People(object):
color = ‘yellow‘
__age = 30 ####私有属性
def think(self):
self.color = ‘black‘
print "i am a %s" % self.color
print "I am a thinker"
print self.__age ###调用类的私有属性
ren = People()
print ren.color
ren.think()
~
执行脚本
[[email protected] day04]# python class1.py
yellow
i am a black
I am a thinker
30
=====================================================
如果在类外中调用私有属性,会提示找不到属性
#!/usr/bin/python
class People(object):
color = ‘yellow‘
__age = 30
def think(self):
self.color = ‘black‘
print "i am a %s" % self.color
print "I am a thinker"
print self.__age
ren = People()
print ren.color
ren.think()
print ren.__age ####调用类的私有属性
~
执行
提示找不到属性
Traceback (most recent call last):
File "class1.py", line 14, in <module>
print ren.__age
AttributeError: ‘People‘ object has no attribute ‘__age‘
类的方法
方法的定义和函数一样,但是需要self作为第一个参数
类型:
公有方法:在类中和类外都能调用的方法
私有方法: 不能被类的外部调用,在方法前面加上"__"双下划线就是私有方法
self参数
用于区分函数和类的方法(必须有一个self) self参数表示执行对象本身
===============================================================
公有方法实例:
#!/usr/bin/python
#coding:utf8
class People(object):
color = ‘yellow‘
__age = 30
def think(self):
self.color = ‘black‘
print "i am a %s" % self.color
print "I am a thinker"
print self.__age
def test(self):
self.think() ####调用方法think
jack = People()
jack.test()
执行
[[email protected] day04]# python class2.py
i am a black
I am a thinker
30
===================================================================
私有方法实例:
#!/usr/bin/python
#coding:utf8
class People(object):
color = ‘yellow‘
__age = 30
def think(self):
self.color = ‘black‘
print "i am a %s" % self.color
print "I am a thinker"
print self.__age
def __talk(self):
print "i am talking with tom"
def test(self):
self.__talk() ###调用私有方法talk
jack = People()
jack.test()
执行
[[email protected] day04]# python class2.py
i am talking with tom
类的继承
一个类继承另外一个类时,会获得另外一个类的所有属性和方法,原有的类成为父类,而新类称为子类,子类基础父类的所有属性和方法
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descirptive_name(self):
long_name = str(self.year) + ‘ ‘ + self.make + ‘ ‘ + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
class ElectircCar(Car): ###定义子类ElectricCar
def __init__(self,make,model,year):
super().__init__(make,model,year) ###初始化父类的属性,调用electircar的父类方法__init__(),使electircCar包含父类的所有属性
my_tesla = ElectircCar(‘tesla‘,‘model S‘,2016) ##创建ElectircCar类实例,调用父类Car定义的方法__init__()
print(my_tesla.get_descirptive_name()) #调用父类方法
执行结果
2016 Tesla Model S
###创建子类时,父类必须包含在当前文件中,且位于子类前面,必须在括号内指定父类的名称
super()为了将父类的和子类关联起来
子类定义属性和方法
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descirptive_name(self):
long_name = str(self.year) + ‘ ‘ + self.make + ‘ ‘ + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
class ElectircCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size = 70 ##子类属性
def describe_battery(self): ##子类方法
print("This car has a " + str(self.battery_size) + "-kwh battery.")
my_tesla = ElectircCar(‘tesla‘,‘model S‘,2016)
print(my_tesla.get_descirptive_name())
my_tesla.describe_battery()
执行结果
2016 Tesla Model S
This car has a 70-kwh battery.
以上是关于Python面向对象的主要内容,如果未能解决你的问题,请参考以下文章