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面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Python --013--面向对象

Python—面向对象

python之面向对象

Python 面向对象

python 面向对象

Python面向对象