python语法

一、面向对象

面向对象编程是一种将现实世界中的概念映射到程序中的编程范式。

1、类和对象

1.1、类

类是创建对象的 ”模板”。它包含

  • 数据成员:表明事物的特征。 相当于变量

  • 方法成员:表明事物的功能。 相当于函数

  • 通过class关键字定义类。

  • 类的创建语句语法:

class 类名 (继承列表):
	实例属性(类内的变量) 定义
    实例方法(类内的函数method) 定义
    类变量(class variable) 定义
    类方法(@classmethod) 定义
    静态方法(@staticmethod) 定义

下面是代码示例
class Dog:
    name = 'Dog'
    age = 2
    def eat(self):
        print("Dog is eating")
        return 'Dog is eating...'
dog01 = Dog()  

类的创建的说明:

  • 类名必须为标识符(与变量的命名相同,建议首字母大写)

  • 类名实质上就是变量,它绑定一个类

 

1.2、对象 

对象是类的实例,通过类创建。

1.3、继承

继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以重用代码,减少冗余。

class Car:
    def __init__(self, brand, price):
        self.brand = brand
        self.price = price

class BYD(Car):
    def __init__(self, brand, price, year):
        Car.__init__(self,brand, price)
        self.year = year

    def display(self):
        print(f"这台BYD是{self.year}年生产的,是{self.brand}类型的 售价是{self.price}元")
        
byd = BYD("纯电动", 100000, 2024)
byd.display()

在这里,子类BYD继承了父类Car的brand和price两个属性

二、py中的类和对象

2.1、类的定义

在py中类通过class 来定义

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

    def work(self):
        print(f"{self.name}上班挣了{self.salary}元")

    def teach(self, student_name, skill):
        print(f"{self.name}教{student_name}{skill}")

    def learn(self, teacher_name, skill):
        print(f"{self.name}向{teacher_name}学习{skill}")

2.2、__init__(构造函数)

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法(java 中称为:构造函数),在创建实例的时候,就把name,age等属性绑上去:
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去。

2.3、self

  • self是类方法的第一个参数,用于引用对象本身。

  • self不是Python关键字,但是约定俗成的命名,可以使用其他名称代替,但通常不建议。

 2.4、类属性

  • 类属性是类的属性,此属性属于类,不属于此类的实例

  • 作用:

    • 通常用来存储该类创建的对象的共有属性

  • 类属性说明

    • 类属性,可以通过该类直接访问

    • 类属性,可以通过类的实例直接访问

  • 类属性示例

    class GsBank:
        price = 10000000
        name = '中国工商银行总行'
        
        @classmethod
        def print_price(cls):
            print(f"总行剩余{cls.price}")
            
        def __init__(self, bank_name, bank_money):
            self.bank_name = bank_name
            self.bank_money = bank_money
            GsBank.price = GsBank.price - bank_money
        
            
    gsbank01 = GsBank("成都分行",1000000)
    gsbank02 = GsBank("北京分行",2000000)
    print(GsBank.price)
    GsBank.print_price()

2.5、类方法

  • 类方法是用于描述类的行为的方法,类方法属于类,不属于该类创建的对象

  • 说明

    • 类方法需要使用 装饰器定义

    • 类方法至少有一个形参,第一个形参用于绑定类,约定写为'cls'

    • 类和该类的实例都可以调用类方法

    • 类方法不能访问此类创建的对象的实例属性

    • class GsBank:
          price = 10000000
          name = '中国工商银行总行'
          count = 0
          count1 = 0
          
          @classmethod
          def print_price(cls):
              print(f"总行剩余{cls.price}")
              cls.count1 += 1
          
          @classmethod
          def counter(cls):
              print(f"创建了{cls.count}个GsBank实例")
              cls.count1 += 1
              
          def __init__(self, bank_name, bank_money):
              self.bank_name = bank_name
              self.bank_money = bank_money
              GsBank.price = GsBank.price - bank_money
              GsBank.count += 1
          
              
      gsbank01 = GsBank("成都分行",1000000)
      gsbank02 = GsBank("北京分行",2000000)
      gsbank03 = GsBank("上海分行",1000000)
      gsbank04 = GsBank("深圳分行",1000000)
      print(GsBank.price)
      GsBank.print_price()
      GsBank.counter()
      print(GsBank.count1)
      cls

      在Python中,cls 是一个约定俗成的名称,用于表示类本身。在类方法(使用 @classmethod 装饰的方法)中,cls 作为第一个参数传递给方法。这使得类方法可以访问和修改类属性以及调用其他类方法,而不需要引用具体的实例。

      cls 的作用

    • 访问类属性:类方法可以通过 cls 访问和修改类属性。

    • 调用类方法:类方法可以通过 cls 调用其他类方法。

    • 创建类实例:类方法可以使用 cls 来创建类的实例。

2.6、静态方法

  • 静态方法是定义在类的内部函数,此函数的作用域是类的内部

  • 说明

    • 静态方法需要使用@staticmethod装饰器定义

    • 静态方法与普通函数定义相同,不需要传入self实例参数和cls类参数

    • 静态方法只能凭借该类或类创建的实例调用

    • 静态方法可以访问类属性但是不能访问实例属性

      class Myclass:
          count = 0
          def __init__(self, name):
              self.name = name
          
          @staticmethod
          def myadd(x,y):
              return x + y
         
      myclass01 = Myclass("张三") 
      
      Myclass.myadd(1,3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值