面向对象基础

文章介绍了面向对象编程的基本概念,如类作为具有相同属性和方法的对象集合,以及如何通过实例化创建对象。构造方法用于初始化类的实例,Python和C#中展示了构造方法的使用。文章还讨论了方法重载的概念,虽然Python不直接支持,但可以通过默认参数模拟实现。此外,提到了属性的访问修饰符,如Python中的双下划线表示私有属性。
摘要由CSDN通过智能技术生成

A2:类与实例

类是什么?一切事物皆对象,即所有的东西都是对象,对象是可以看到、摸到、感觉到、听到、闻到、尝到的东西。对象是一个自包含的实体,用一组可识别的特性和行为来识别。

面向对象编程,就是object-oriented programming(针对对象进行编程)

首先,编写一个程序,猫叫。

def cat_shut():
    print("miao")

cat_shut()

如果别的python文件也想让猫叫呢?别的Python文件引用?

这个猫叫的函数有没有更合适的地方呢?就是类,类就是具有相同属性和方法的集合。

class Cat:
    def cat_shut(self):
        print("miao")
  1.  类名第一个字母大写,如果是多个单词,每个单词的第一个字母大写
  2. 对外公开的方法没有修饰符。Python 中声明私有方法,请在方法名称的开头插入双下划线。

怎么用这个类呢?实例化。实例,就是一个真实的对象,比如我们都是「人」,我们都是「人」的实例。实例化就是创建对象的过程。

cat = Cat()
cat.cat_shut()
 

 A3:构造方法

希望出生的猫咪都有自己的名字,在猫叫的时候,说我叫什么名字,然后喵喵喵。此时,就需要构造函数。

构造方法,又叫构造函数,就是对类进行初始化。在类创建的时候,就是调用构造方法的时候了。

可是上面的代码,我们并没有实现构造方法呢?怎么调用的?

所有类都有构造方法,如果你没有定义,就会调用默认生成的空的构造方法。若有自定义的构造方法,默认的构造方法就失效了。

# python
class Cat:
    def __init__(self, name):
        self.__name = name

    def cat_shut(self):
        print("my name is %s, miao" % self.__name)

cat = Cat("mimi")
cat.cat_shut()

C#程序如下

using System;
namespace HelloWorldApplication
{
    class Cat
    {
        private string name = "";
        public Cat(string name){
            this.name = name;
        }
        public string Shout(){
            return "my name is " + name + " miao";
        }
    }
   class HelloWorld
   {
      static void Main(string[] args){
          Cat cat = new Cat("abc");
          Console.WriteLine(cat.Shout());
      }
   }
}
  1. python中,两个下划线开头的为私有属性,否则会公有属性。
  2. 私有属性只允许类内部访问。

 A.4:方法重载

C#中,有的父母孩子生下来,并没有名字,如果写cat=Cat()就会报错。

如果猫咪即使没有名字,也要生下来,可以使用方法重载。

using System;
namespace HelloWorldApplication
{
    class Cat
    {
        private string name = "";
        public Cat(string name){
            this.name = name;
        }
        public Cat(){
            this.name = "无名";
        }
        public string Shout(){
            return "my name is " + name + " miao";
        }
    }
    
   class HelloWorld
   {
      static void Main(string[] args){
          Cat cat = new Cat("abc");
          Console.WriteLine(cat.Shout());
          Cat cat2 = new Cat();
          Console.WriteLine(cat2.Shout());
      }
   }
}

方法重载提供了创建多个同名方法的能力,这些方法具有不同的参数类型。而且,不仅构造方法可以方法重载,普通方法也是可以重载的。

方法重载的好处是什么?可以在不改变原有方法的基础上,新增功能。方法重载提供了扩展函数的能力。

如果要分清猫咪的姓和名,还可以再重载实现一个方法。eg

public Cat(string firstName, string secondName){
  xxxx
}

================================================

但是Python是不支持方法重载的,假如声明多个方法同名,参数类型不同的方法,方法调用的时候,只会调用最后一个定义的同名方法。

但可以通过逻辑改变来实现方法重载。默认参数的形式。

class Cat:
    def __init__(self, name):
        self.__name = name

    def cat_shut(self):
        print("my name is %s, miao" % self.__name)

    def cat_eat(self, food="apple"):
        print("cat eat %s" % food)

cat = Cat("mimi")
cat.cat_shut()
cat.cat_eat("orange")
cat.cat_eat()

输出:

  my name is mimi, miao
  cat eat orange
  cat eat apple

 

A.5:属性与修饰符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值