首页 > 编程语言 > 详细

Python入门基础学习(面向对象)

时间:2019-11-01 12:45:46      阅读:85      评论:0      收藏:0      [点我收藏+]

Python基础学习笔记(四)

 

面向对象的三个基本特征:

  • 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内
  • 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能进行拓展
  • 多态性:派生类具有基类的所有非私有数据和行为以及新类自己定义的所有数据或行为,即子类具有两个有效类型:子类的类型及其继承基类的类型。对象可以表示多个类型的能力称为多态性(Python不需要重载overload)

 

类与对象的概念:

类和变量是面向对象编程的两个核心概念

类:对一群具有相同特征(属性)或者行为(方法)的事物一个统称,抽象的,如:王者荣耀里的泛指的英雄

对象:由类创建出来的一个具体存在,可以直接使用,如:英雄中的李白

 

类的设计:

1.类型:满足大驼峰命名法(每个单词首字母大写,单词与单词之间没有下划线)

2.属性:事物具有什么样的特征

3.方法:事物具有什么样的行为

 

属性与方法的确定:

1.对对象特征的描述,可以定义成属性

2.对象具有的行为(动词),通常可以定义成方法

 

类的定义以及创建对象:

类定义的格式:

技术分享图片

创建对象格式:

技术分享图片

 

实例属性:

通过"self.变量名"定义的属性,称为实例属性,也称为实例变量,每个实例包含类的一个单独副本

初始化(一般在__int__函数中):self.实例变量名 = 初始值

其他函数中可以通过self访问:self.实例变量 = 值

创建对象实例,通过对象访问:obj1.实例变量名 = 值

例子:

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hi(self):
        print(‘您好!我叫%s‘%(self.name))
person = Person(‘HHS‘,‘21‘)
person.say_hi()
print(‘今年{0}‘.format(person.age))
输出:
您好!我叫HHS
今年21

 

类属性:

Python也允许声明属于类本身的变量,即类变量、静态属性

类属性属于整个类,不是特定实例的一部分,而是所有实例之间共享的一个副本

初始化(一般在类体中):类变量名 = 初始值

类的访问类名.类变量名 = 值

例子:

class Person:
    count = 0
    name = "HHS"
#test
Person.count += 1
print(Person.count) #1
print(Person.name)  #HHS
p1 = Person()
p2 = Person()
print((p1.name,p2.name))    #(‘HHS‘, ‘HHS‘)
Person.name = ‘华南理工大学广州学院‘
print((p1.name,p2.name))    #(‘华南理工大学广州学院‘, ‘华南理工大学广州学院‘)
p2.name = ‘计算机科学与技术‘
print((p1.name,p2.name))    #(‘华南理工大学广州学院‘, ‘计算机科学与技术‘)
p2.count += 1
print((Person.count,p1.count,p2.count)) #(1, 1, 2)

 

说明:

类属性如果通过‘obj.属性名‘访问,则属于该实例的实例属性,虽然类属性可以使用对象实例来访问,但这样容易造成困惑。所以建议不要这样使用,而是应该使用标准的访问方式:类名.类变量名

 

私有属性和公有属性:

Python类的成员没有访问控制限制,与其他面向对象的语言不同

通常约定两个下划线开头且吧不以两个下划线结束的属性为私有(private),其他为公共(public)

不能直接访问私有属性,但可以在方法中访问

class A:
    __name = ‘class A‘
    def get_name():
        print(A.__name)
#test
A.get_name() #class A
A.__name    #AttributeError: type object ‘A‘ has no attribute ‘__name‘

 

 

特殊属性:

以双下划线开始和结束的方法,称为特殊方法

常见的特殊方法:

object.__dict__   对象的属性字典

object.__class__   对象所属的类

class.__bases__  类的基类元组

class.__bases__  类的基类

class.__name__  类的名字

class.__mro__  方法查找顺序,基类的顺序

class.__subclasses__()  子类序列

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hi(self):
        print(‘您好!我叫%s‘%(self.name))
person = Person(‘HHS‘,‘21‘)
print(person.__dict__)  #object.__dict__  输出:{‘name‘: ‘HHS‘, ‘age‘: ‘21‘}
print(person.__class__)  #object.__class__ 输出:<class ‘__main__.Person‘>
print(Person.__bases__)  #class.__bases__ 输出:(<class ‘object‘>,)
print(Person.__base__)  #class.__base__ 输出:<class ‘object‘>
print(Person.__name__)  #class.__name__ 输出:Person
print(Person.__mro__)  #class.__mro__ 输出:(<class ‘__main__.Person‘>, <class ‘object‘>)
print(Person.__subclasses__())  #class.__subclasses__() 输出:[]

 

 

持续更新

 

Python入门基础学习(面向对象)

原文:https://www.cnblogs.com/hhs1998/p/11769879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!