python3:面向对象(属性、方法)

python是一门面向对象语言。因此,在python中创建类和对象是很容易的一件事。

在这篇博文中,主要写一下面向对象中使用的一些注意点。

Q1:面向对象编程

  1. 确定对象的属性和方法
  2. 抽象具有共同特征的对象为一个类
  3. 设计类与类之间的关系
  4. 实例化对象

Q2、类的定义、属性和方法

class Car:      #定义一个名为car的类
    color = ' '   #定义属性color

    def run (self):    #定义方法run(),参数为self,表示类自身的参数在方法中传递
        print("go go go!")

BMW = Car()    #实例化一个BMW对象,类为Car
BMW.color = 'red'    #给BMW中color属性设置为red
print(BMW.color)     

Q3:公有属性和私有属性

  • 公有属性:name
  • 私有属性:_ _name
class Human:
    name='ren'          #公有属性 name、gender、age
    gender = 'male'
    age = '25'
    __money = 8000      #私有属性__money

zhangsan = Human()
zhangsan.name = 'zhangsan'
print(zhangsan.name)

注意:print(zhangsan.name)  访问的是公有属性name
           print(zhangsan.__money)    不可以访问私有属性__money,程序执行的时候报错。如下:

那么我们要访问类中的私有属性怎么办呢?

使用方法来访问。

Q4:公有方法和私有方法

  • 公有方法: def  _ _funName(self):
  • 私有方法: def funName(self):
    def say(self):      #公有方法
        print("my name is %s ,i have %d "%(self.name,self.__money))
       
    def __lie(self):    #私有方法
        print("my name is %s ,i have %d "%(self.name,self.__money))

zhangsan.say()   访问公有方法,可以
zhangsan.__lie()  访问私有方法,出错!如下:

注意:公有属性和方法大家都可以访问。但是私有属性和私有方法只有类内部才能使用。

因此可写成如下形式:

    def say(self):      #公有方法
        print("my name is %s ,i have %d "%(self.name,self.__money))
        self.__lie()
    def __lie(self):    #私有方法
        print("my name is %s ,i have %d "%(self.name,self.__money))

Q5:特殊方法

(1)_ _init_ _()   构造函数

class Human:
      def __init__(self):
        print("#"*50)

zhangsan =Human()

可以看出,当创建一个对象时,构造函数自动执行。因此,可以用作初始化属性赋值!

  def __init__(self,name,age):
        self.name = name
        self.age = age

(2)析构函数

Q6:魔法方法,实则也是一些内置的方法(前后有一些下划线的方法)

class Human:
    name='ren'          #公有属性 name、gender、age
    gender = 'male'
    age = '25'
    __money = 8000      #私有属性__money
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("#"*50)
    def __str__(self):
        msg="hi! I am a girl!"
        return msg
   
zhangsan =Human('zhangsan',30)
print(zhangsan)

创建完Human后,直接输出类自动执行方法__str__()

Q7:_ _doc_ _   是一个内置属性,打印文档字符串

class Human:
    '''
        this is Human class docstring!!!
    '''
        
print(Human.__doc__)   #打印内置属性

执行结果如下:

其他的内置属性还有:

  • __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
  • __name__: 类名
  • __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
  • __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

猜你喜欢

转载自blog.csdn.net/sunshine_lyn/article/details/81108969