Python面向对象

我们先写一个类,同时创建对象

class ClassName:
    def __init__(self,a,b,c):
        print('动物类!')
        print(a)
        print(b)
        print(c)
first=ClassName('麻雀','狮子','老虎')

这是一个叫ClassName的类,它里面只有一个构造函数,__init__就是构造函数,在创建对象的时候由编译器自行调用。

我们再介绍它的成员函数或者叫方法

class Geese:
    def __init__(self,beak,wing,claw):
        print('我是大雁类!我有以下特征:')
        print(beak)
        print(wing)
        print(claw)
    def fly(self,state='111111'):#一样可以设置默认参数
        print(state)

brak_1='大'
brak_2='翅膀大'
claw='有爪子'
wildGoose=Geese(brak_1,brak_2,claw)
wildGoose.fly('666666')
wildGoose.fly()
#__init__差不多相当于构造函数,实例化对象就调用

这里除了提供了一个构造函数,还提供了一个类方法fly,值得注意的是self相当于Java或者C++的this,表示当前类的对象,可以调用当前类中的属性和方法。同时我们也可以像普通函数一个写作默认参数,示例都写好了。

创建类的数据成员并访问

class Geese:
    neck='脖子长'
    wing='翅膀大'
    leg='腿位于身体的中心'
    def __init__(self):
        print('大雁类有以下特征')
        print(Geese.neck)
        print(Geese.wing)
        print(Geese.leg)

geese=Geese()#创建对象
geese.neck='666'

在默认情况下,访问权限是public,即可以直接外部访问

通过类属性统计类实例化个数

class Geese:
    neck='脖子长'
    wing='翅膀大'
    leg='腿位于身体的中心'
    number=0
    def __init__(self):
        Geese.number+=1
        print('我是第'+str(Geese.number)+'个大雁,我有以下特征:')
        print(Geese.neck)
        print(Geese.wing)
        print(Geese.leg)
        print()

list=[]
for i in range(4):#调用四次构造实例化对象放入list列表内
    list.append(Geese())

print(Geese.number)
print('第二只大雁的翅膀',list[1].wing)#可以直接通过列表访问

通过这个例子我们可以看出来,number的值会一直增加,而不是像C++等一样,数据完全不共享,构造函数改变了成员数据number后,会一直记录着

我们再举一个例子,实例属性

class Geese:
    def __init__(self):
        neck='111'
        wing='222'
        leg='333'
        print('输出')
        print(neck)
        print(wing)
        print(leg)

geese=Geese()
#也可以直接在外部修改
geese.neck='100'
print(geese.neck)
class Geese:
    def __init__(self):
        self.neck='111'
        self.wing='222'
        self.leg='333'
        print('输出')
        print(self.neck)
        print(self.wing)
        print(self.leg)

geese=Geese()
#也可以直接在外部修改
geese.neck='100'
print(geese.neck)

这两段代码的结果没有任何不同,希望能意识到self的作用,就只是给我们看而已

限制类private私有访问权限

class Swan:#在Python中双下划线表示private私有属性
    __neck_swan='天鹅脖子很长'
    def __init__(self):
        print(Swan.__neck_swan)

swan=Swan()
print(swan._Swan__neck_swan)#访问私有名,得加上类名,在类名前面还得加上下划线,然后两个下划线表示私有,然后具体成员

Python的私有属性是可以被外部直接改变的,只需要满足注释上面的写法

为属性添加安全保护

class TVshow:
    def __init__(self,show):
        self.__show=show
    @property
    def show(self):
        return self.__show
    def demo(self):
        return self._a

tvshow=TVshow('正在播放《战狼2》')
print(tvshow.show)#show的属性是只读的
#tvshow.show='55'   #会抛出异常
tvshow.demo='55'   #方法被转化为属性,直接赋值,上面的无法赋是因为有歧义
print(tvshow.demo)

以单下划线开头的表示protected(保护)类型的成员,只允许类本身和子类进行访问,所以是允许外部类对象进行修改。就不再演示了

创建用于计算的类

class Rect:
    def __init__(self,width,height):
        self.width=width
        self.height=height
    @property       #将方法转换为属性
    def area(self):
        return self.height * self.width

rect=Rect(100,10)
print('面积为:',rect.area)

继承的基本语法

class Fruit:  # 定义水果类(基类)
    color = "绿色"    # 定义类属性
    def harvest(self, color):
        print("水果是:" + color + "的!")  # 输出的是形式参数color
        print("水果已经收获……")
        print("水果原来是:" + Fruit.color + "的!")  # 输出的是类属性color


class Apple(Fruit):  # 定义苹果类(派生类)
    color = "红色"
    def __init__(self):
        print("我是苹果")

class Orange(Fruit):  # 定义橘子类(派生类)
    color = "橙色"
    def __init__(self):
        print("\n我是橘子")

     # 重写harvest()方法的代码
##    def harvest(self,color):
##        print("橘子是:"+color+"的!")           # 输出的是形式参数color
##        print("橘子已经收获……")
##        print("橘子原来是:"+Fruit.color+"的!");   # 输出的是类属性color


apple = Apple()  # 创建类的实例(苹果)
apple.harvest(apple.color)  # 调用基类的harvest()方法
orange = Orange()  # 创建类的实例(橘子)
orange.harvest(orange.color)  # 调用基类的harvest()方法

方法重写

class Fruit:  # 定义水果类(基类)
    color = "绿色"    # 定义类属性
    def harvest(self, color):
        print("水果是:" + color + "的!")  # 输出的是形式参数color
        print("水果已经收获……")
        print("水果原来是:" + Fruit.color + "的!")  # 输出的是类属性color

class Oranger(Fruit):
    color="橙色"
    def __init__(self):
        print('\n我是橘子')
    def harvest(self, color):
        print('橘子是:'+color+'的!')
        print('橘子已经收获……')
        print('橘子原来是:'+Fruit.color+'的!!!!!!!!!!!!!!!!!!!')

Test=Oranger()
Test.harvest('红色')

派生类调用基类方法

class Fruit:
    def __init__(self,color='绿色'):
        Fruit.color=color
    def harvest(self):
        print('水果原来是:'+Fruit.color+'的!')

class Apple(Fruit):
    def __init__(self):
        super().__init__()#需要在派生类使用super函数调用基类方法
        print('我是苹果')

apple=Apple()
apple.harvest()

 和大部分面向对象的语言没什么区别,语法略有不同,如有错误还请指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,可以通过定义类来创建对象,并通过实例化类来创建具体的对象。引用[1]中的代码示例展示了一个Animal类,其中包含了初始化方法和一个__str__方法来返回对象的描述信息。通过这个类,可以创建Animal对象,并通过print函数输出对象。引用中的代码示例展示了如何使用@property装饰器来定义类的属性和属性的访问方法。通过这种方式,可以在访问属性时像访问普通属性一样使用点号,而不需要使用方法调用的方式。引用中的代码示例展示了多态在Python中的应用。多态是面向对象编程的重要概念,它允许不同的对象以相同的方式对外部访问,但具体的实现可能不同。在这个示例中,father、son和daughter类都继承了father类,并重写了tell方法。通过调用不同的对象的tell方法,可以看到不同的输出结果。总之,Python面向对象编程是一种灵活且强大的编程方式,它允许开发者以对象为中心来思考和组织代码,提高了代码的可读性和可维护性。通过定义类、创建对象和使用类的属性和方法,可以实现丰富多样的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python面向对象(全套)](https://blog.csdn.net/Thewei666/article/details/126652501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值