Python面向对象

本文详细介绍了Python的面向对象编程概念,包括类的创建、类属性和实例属性的使用、初始化函数`__init__`、封装的概念、继承以及多态的实现。通过示例代码展示了如何定义和操作类,以及如何利用继承和多态性来设计更复杂的程序结构。
摘要由CSDN通过智能技术生成

本文主要介绍Python面向对象的语法


在这里插入图片描述

class Student:
 def setName(self, n): # self必须显式地作为成员方法的第一个参数
  self.name = n # 属性必须加self引用,即使不与形参同名

s = Student() # 创建一个对象,注意不要new
s.setName("Tom")
print(s.name)

运行结果:
Tom

类 属 性 和 实 例 属 性

  • 类变量指的是在类中,但在各个类方法外定义的变量。
  • 实例变量指的是在任意类方法内部,以“self.变量名”的方式定义的变量。
class Student:
 schoolName = "HNUST" # schoolName为类变量
 def setName(self, n):
  self.name = n # name为实例变量

print(Student.schoolName) # 用类名引用类属性
s = Student() # 创建Student对象
s.setName("张三") # 调用对象的成员方法
print(s.name) # 用对象名引用对象属性
print(s.schoolName) # 用对象名引用类属性

运行结果:
HNUST
张三
HNUST 
#注意:注意必须先调用setName,name才成为实例变量

初始化函数

python的初始化函数: __ init __ (self)

python的初始化函数不能重载,不能重载,不能重载!

class Student:
 schoolName = "HNUST"
 def setName(self, name):
  self.name = name
  
s = Student() # 调用了默认的初始化函数
s.setName("张三")
print(s.schoolName,s.name)

运行结果:
HNUST 张三
python的初始化函数:__init__(self)
class Student:
 schoolName = "HNUST"
 def __init__(self, name): # 方法名:init前后两个下划线
  self.name = name

s = Student("Tom")
print(s.name)

运行结果:
Tom

可以利用带默认形参的构造函数来解决不能重载的问题!

class Student:
 schoolName = "HNUST"
 def __init__(self, name = "**"):
  self.name = name

s = Student() # 不传参,name使用默认值
print(s.name)
s = Student("张三")
print(s.name)

运行结果:
**
张三

封装

在一个类中定义的属性(不管是类属性仍是实例属性),若是是以双下划线开头,那么这个属性是对外 (包括其子类中) 不可见的,类似于 java 中的 private 属性,单下划线类似protected

class Student:
    schoolName = "HNUST"
    def __init__(self, name, age, sex):
      self.name = name  # 默认公有成员
	  self.__age = age  # 前面两个下划线的为私有成员
      self._sex = sex  # 前面一个下划线的为保护成员
    
s = Student("张三", 18, "男")
s._Student__age = 20  # 伪私有,系统只是将私有属性改名为_Student__age
#print(s.__age) # 报错,无该属性
print(s._Student__age)  # 20

继承

class Student:
 schoolName = "HNUST"
 def __init__(self, name, age, sex):
  self.name = name
  self.age = age
  self.sex = sex
class Undergraduate(Student): # 声明继承:父类名写在子类名后的括号中
 def __init__(self, name, age, sex, grade):
  super().__init__(self, name, age, sex) # 先调用父类构造方法
  self.grade = grade # 初始化子类自己的数据成员
    
g = Undergraduate("张三",18,"男","二年级")
print(g.name,g.age,g.sex,g.grade)

多态

(1)有继承关系的多态

class Animal(object):
 def talk(self):
  print('动物叫')
class Cat(Animal):
 def talk(self): # 重写talk方法
  print('喵!喵!喵!')
class Dog(Animal):
 def talk(self): # 重写talk方法
  print('汪!汪!汪!')

cat = Cat()
dog = Dog()
an = Animal()
an = cat
an.talk()
an = dog
an.talk()

(2)对象所属的类之间没有继承关系
调用同一个函数, 传入不同的参数(对象),可以达成不同的功能。

class Cat:
  def talk(self):
        print('喵!喵!喵!')
class Dog:
    def talk(self):
        print('汪!汪!汪!')
def func(an):
    an.talk()

func(Cat())
func(Dog())

运行结果:
喵!喵!喵!
汪!汪!汪!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值