python面向对象

1、面向对象是什么 

 

  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

例如:

class ATM():
    # 属性
    money = 50000
    country = "china"
    bank = "gonghang"
    # 方法
 
    def get_money(self, money):
        print(f'get money:{money}')

实例:

 具体的某个事物,实实在在的例子

实例化:创造一个类的实例,类的具体对象

例如:这里的a1和a2就是实例

# 实例化:创建一个类的实例
# a1,a2 就是实例
a1 = ATM()
a2 = ATM()
print(dir(a1))
print(a1.money, a2.country)
a1.get_money(500)

2、类的方法

①继承(Inheritance):一个派生类(derived class)继承基类(base class)的字段和方法。

写法:

class son(father):
    <statement-1>
    .
    .
    .
    <statement-N>

son(派生类)这个类继承了类father(基类)里的所有属性和方法

实例:

#定义一个people类
class people:
    #定义基本属性名字和年龄
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    def say(self,name,age):
        print("%s 说: 我 %d 岁了")
 
#单继承示例
class student(people):
    def say(self,name,age):
        #调用父类的构函
        people.say(self,name,age)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了"%(self.name,self.age))
 

s = student('ken',10,60)
s.speak()

②多继承:一个基类可以被多个派生类继承,也可以被派生类继承不同的属性和方法

写法:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

例:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
 
#多重继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
 
test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中参数位置排前父类的方法

③方法重写:在子类中重写父类里的方法

例:

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

3、self

在python中,一个类的函数的第一个参数实际上是实例对象本身,就是所说的self(命名成什么并没有什么影响)。也就是说,所有python中的函数,只要函数在一个类里面,第一个参数都应该为self,如果不是self,那也是实例对象本身

比如:

这个例子说明self代表的是类的实例,代表当前对象的地址,self.class则指向类 ,即便是把prt方法中的self改成别的比如other,输出结果也是相同的

4、__init__()实例初始化

__init__():是类的一个专有方法,通常用来构造函数,在生成对象时调用

例:

class ATM():
    # 类属性
    money = 50000
    country = "china"
    bank = "gonghang"

    # 这个area是形参
    def __init__(self, area):
        # 这个area是实例属性
        self.area = area

    # 方法
    def get_money(self, money):
        print(f'get money:{money}')


# 实例化
atm1 = ATM("hunan")
atm2 = ATM("hubei")
print(atm1.area, atm2.area)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值