面向对象-类的定义和实例化

面向对象是一种认识世界,分析世界的方法论,将万事万物抽象为类

类class

类是抽象的概念,是万事万物的抽象,是一类事物的共同特征集合

用计算机语言来描述类,就是属性和方法的集合

对象instance,object

对象是类的具象,是一个实体

一切皆对象

对象是数据和操作的封装

对象是独立的,但是对象之间可以相互作用

面向对象三要素

1.封装

  • 组装,将数据和操作组装到一起
  • 隐藏数据,对外只暴露一些接口,通过接口访问对象

2.继承

  • 多复用,继承来的就不用自己写
  • 多继承少修改,ocp使用继承来改变,来体现个性

3.多态

  • 面向对象编程最灵活的地方,动态绑定

人类就是封装;

热泪继承自动物类,孩子继承父母特征,分为单一继承,多继承,多态,继承自动物类的人类,猫类的操作吃不同

python的类定义

class ClassName:
    语句
  • 必须使用class关键字
  • 类名必须用大驼峰命名
  • 类定义完成后,就产生了一个类对象,绑定到了标识符ClassName上

示例:

class MyClass:
    """A example class"""
    x = ‘abc‘ #类属性

    def foo(self): #类属性foo,也是方法
        return "hello world"

print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)

输出为:

abc
<function MyClass.foo at 0x000002091C9F3268>
A example class

类对象及类属性

  • 类对象,类的定义就会产生一个类对象
  • 类的属性,类定义中的变量和类中定义的方法都是类的属性
  • 类变量,上例中x是类MyClass的变量

MyClass中,x和foo都是泪的属性,__doc__也是类的属性

foo方法是类的属性,如同人类的方法,但是每一个具体的人才会吃东西,也就是说是人的实例才能调用的方法

foo是方法对象method,不是普通的函数对象function了,它一般要求至少有一个参数,第一个参数可以是self,这个参数位置留给self

self指当前历史本身

实例化

a = MyClass() #实例化

使用上面语法,在类对象名称后面加上一个括号,就调用类的实例化方法,完成实例化

实例化就真正的创建了一个该类的对象(实例)

示例:

tom  = Person()
jerry = Person()

tom和jerry都是Person类的实例,通过实例化生成2个实例

每次实例化后获得的实例,是不同的实例,即使是使用同样的参数实例化,也得不到一样的对象

python类实例化后,会自动调用__init__方法,这个方法第一个参数必须留给self自己

__init__方法

MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例化后隐式调用

__init__作用是对实例进行初始化

__init__()方法不能有返回值,也就是只能return None

示例:

class MyClass:
    def __init__(self):
        print(‘init‘)

print(MyClass)  # 不会调用
print(MyClass())  # 调用__init__
a = MyClass()  # 调用__init__

输出为:

<class ‘__main__.MyClass‘>
init
<__main__.MyClass object at 0x000001F030782978>
init

初始化函数可以多个参数,第一个参数位置必须是self

示例:

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

    def showage(self):
        print(‘{} is {}‘.format(self.name,self.age))

tom = Person(‘tom‘, 18)
jerry = Person(‘jerry‘, 20)
print(tom.name, jerry.name)
jerry.age += 1
print(jerry.age)
jerry.showage()

输出为:

tom jerry
21
jerry is 21

实例对象instance

类实例化后一定会获得一个对象,就是实例对象

上例中tom和jerry就会Person类的实例

__init__方法的第一参数self就是指代某一个实例

类实例化后,得到一个实例对象,会绑定方法,调用方法时会采用jerry.showage()方式

python会把方法的调用者作为第一参数self的实参传入

self.name就是jerry对象的name,name是保存在jerry对象上,而不是Person类上,称为实例变量

self

示例:

class MyClass:
    def __init__(self):
        print(‘self in init = {}‘.format(id(self)))

c = MyClass()  # 会调用__init__
print(‘c = {}‘.format(id(c)))

输出为:

self in init = 1992925063824
c = 1992925063824

上例说明,self就是调用者,就是c对应的实例对象

self这个名字只是一个惯例,可可以修改,但是不要修改,会影响代码可读性

原文地址:https://www.cnblogs.com/rivendare/p/9672950.html

时间: 2024-10-08 02:15:48

面向对象-类的定义和实例化的相关文章

Java知多少(18)类的定义及其实例化

类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: 1 public class Dog{ 2 String name; 3 int age; 4 5 void bark(){ // 汪汪叫 6 System.out.println("汪汪,不要过来"); 7 } 8 9 void hungry(){ // 饥饿 10 System.out.println("主人,我饿了"); 11 } 12 } 对

Java类的定义及其实例化

如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; void bark(){  // 汪汪叫 System.out.println("汪汪,不要过来"); } void hungry(){  // 饥饿 System.out.println("主人,我饿了")

1.Java类的定义及其实例化

类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; void bark(){  // 汪汪叫 System.out.println("汪汪,不要过来"); } void hungry(){  // 饥饿 System.out.println("主人,我饿了"); } } 对示例的说明: public 是类的修饰符,表明该类

C++ template学习二 类模板定义及实例化

一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员.默写成员函数的参数.某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的). 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的.实际的类,而是代表着一类类. //templatedemo.h#ifndef TEMPLATE_DEMO_HXX#define TEMPLATE_DEMO_HXX template

一个简单的c++类的定义和实例化

#include "iostream" #include <string> using namespace std; class mycoach { private: string name; short age = 0; public: void coachgreeting(string _name, int _age) { name = _name; age = _age; cout << "大家好,我是" << name &

关于PHP面向对象中—类的定义与对象的实例化操作以及构造、析构函数的特殊用法

类的定义与对象的实例化操作 <?php //类里面的成员是属于对象的class Hero{    public $name;//成员变量    //成员属性(存在于强类型语言中)    protected $blood;    private $attack;    //成员方法    function skill(){        echo "$this->name<br>control";            }} $s = new Hero();//造

python 之 面向对象基础(定义类、创建对象,名称空间)

第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流程化.进而简单化 ? 缺点:可扩展性差 2.面向对象 核心"对象"二字,对象指的是特征(变量)与技能(函数)的结合体,需要创造出一个个的具体存在的对象,程序的执行就是由对象直接交互完成 优点:可扩展性强 ? 缺点:编程的复杂度高于面向过程 7.1 类 7.11 定义类 1.类:对象是特

python的类定义与实例化

理解类属性和实例属性: 直接在类里面定义的变量叫类属性,类属性是公有的,每个类实例化就自动拥有类的属性,且实例化对象的这个属性的初始地址指向类属性的地址 如果直接给实例化对象的属性赋值这样会改变该属性的内存地址,此时不在指向类属性地址,而是在实例内存地址中开一块空间存该属性 在类方法里面定义的self.xx是实例属性,是私有的,每个实例有自己的存储空间,各自的私有属性存在各自的空间中 当然也可以直接给实例化对象增加属性如a1是Animal的实例化对象,则a1.age = 18会给a1添加一个类属

C++ Primer 学习笔记33_面向对象编程(4)--虚函数与多态(一):多态、派生类重定义、虚函数的访问、 . 和-&gt;的区别、虚析构函数、object slicing与虚函数

C++ Primer学习笔记33_面向对象编程(4)--虚函数与多态(一):多态.派生类重定义.虚函数的访问. . 和->的区别.虚析构函数.object slicing与虚函数 一.多态 多态可以简单地概括为"一个接口,多种方法",前面讲过的重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法). 更通俗的说,多态行是指同一个操作作用于不同的对象就会产生不同的响应.或者说,多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态行分