《Python学习》-- 入门篇三

一、类的定义

        Python是一种动态类型语言,可以在运行过程中添加、修改对象的类属性。这点和JAVA不同。

# 类
# 类是对象的抽象
# 类里面的函数称为方法
# 类的命名通常遵循用首字母大写的驼峰式命名法(CapWords,也称为骆驼式命名法)。
# 私有类的命名遵循用下划线开头的驼峰式命名法(_CapWords)。


# 类中使用__开头且以__结尾的方法称为魔术方法,也叫魔法方法
#  __init__  ----> 初始化方法,在调用构造器语法创建对象时会自动被调用
#  __str__  ----> toString方法,在使用print函数打印对象时被调用,可以输出对象的属性,而不是地址
#  __repr__  ----> representation,容器内对象的toString方法,将对象放入容器里,输出容器对象时,可以输出对象的属性,而不是地址
#            repr的作用包含了str。
#  __lt__  ----> 比较大小,可以定义两个对象进行比较,返回布尔值。
## __slots__ ----> 限制类属性,只能有这些属性


from abc   import abstractmethod
class Student:
    """"
    学生

    """

    # 表示这个类只能有一下属性,不能在调用的过程中去动态的添加其他属性
    __slots__ = ('__name', 'age')


    # 构造函数,创建对象时调用
    # self表示当前对象
    # __init__表示构造函数
    # python的方法第一个参数代表当前对象,命名为self或者_self都可以
    # self.name表示当前对象的name属性
    # self.age表示当前对象的age属性
    def __init__(self, name, age):

        self.__name = name
        self.age = age



    # toString方法
    def __str__(self):
        return f"{self.__name}的年龄是{self.age}"

    # toString方法
    def __repr__(self):
        return f"{self.__name}的年龄是{self.age}"

    # 定义一个自我介绍方法
    def introduce(self,sameone: str = '张三'):
        """"
        自我介绍
        """
        print(f"你好,{sameone},我的名字是{self.__name}, 我今年{self.age}岁了")

    # 静态方法
    # 精通方法创建有两种方式,两种方式是等价的
    # 方式一:.使用@staticmethod装饰器
    @staticmethod
    def static_method():
        print("静态方法")

    # 方式二:.使用@classmethod装饰器
    # cls表示当前类
    @classmethod
    def class_method(cls):
        print("类方法")


    # 抽象方法添加 @abstractmethod 注解,不加也不影响程序运行
    @abstractmethod
    def abstract_method(self):
        pass

二、类的引用

# 从当前类中引用另外一个类
# 方式一: 直接引用一个类,则里面的方法都可以直接调用
import  example01


 # 方式二: 引用一个类的某一个方法,并指定别名,然后通过类名.方法名()的方式调用
from example06 import add  as add_func
print(add_func(1,2))

# 引用其他包的类, 如: demo.strUtil
import demo.strUtil
print(demo.strUtil.add(1,2))

 # 注意: 引用一个类时,会将这个类里面的方法外部代码都执行一遍

 # 匿名函数 __name__  读“当得”
print(__name__)  #  在当前类中调用这个函数,会返回 __main__,而在引用这个函数时,会返回这个类的实际名称,如 example06


# 如果从两个类中引用了两个同名方法,则先引用的会被后引用的覆盖掉
from example06 import add  as add_func
from demo.strUtil import add  as add_func  # 最终引用的是这个
# 有两种解决方法:
# 方法一:使用不同的别名
from example06 import add  as add_func
from demo.strUtil import add  as add_func_2
# 方法二:使用完全限定名
import example06
import demo.strUtil
print(example06.add(1,2))
print(demo.strUtil.add(1,2))


# 关键字参数
def foo(a, b, c):
    print(a, b, c)

# 正常传参对号入座,这种参数称为位置参数
foo(1, 2, 3)
# 关键字参数,可以不用对号入座
foo(b=1, a=2, c=3)

# 命名关键字参数
# 写在 * 后面的参数,称为命名关键字参数, 这些参数在传参时必须指定参数名
# 关键字参数只能出现在位置参数的后面
def foo(a, b, *, c):
    print(a, b, c)
print(foo(1, 2, c=3))  #  * 后面的参数必须指定参数名

# 可变参数
# 可变参数前面用 * 号修饰,函数调用时,可变参数会以元组方式传入,可接收0个或多个参数
def foo(*args):
    print(args, type(args))  #  (1, 2, 3) <class 'tuple'>
foo(1, 2, 3)

 备注:如果新建一个package,里面会自动生成一个__init__文件,在这个文件中定义的方法函数只属于这个包,而不属于任何一个类,这个类的代码会在文件被加载时执行 。调用这个文件里面的函数时,只需引用这个包即可,而不用引用这个类。

三、创建对象

# 对象的创建

from example09 import Student

# main 函数
# main 函数 一般作为程序的入口函数
def main():
    student1 = Student('张三', 18)
    student1.introduce('李四')
    student1.__name = '李四'
    print(student1)

# 程序入口,只在当前类中执行则触发下面代码
if __name__ == '__main__':
    main()

四、异常处理

# 异常处理
# python的异常处理 是使用try...except...finally...else...来处理的
i = 1
try:
    print(1 / i)
    print('执行完毕')
except ZeroDivisionError as error:  # 不写异常类型代码任意异常都捕获

    print(error)
else:
    print('没有报错')
finally:
    print('报错必须执行')

五、继承

# 继承
# Python中往类中传入一个类,代表两个类有了继承关系
# Python的继承是多继承的,一个类可以继承多个类,这跟JAVA不同,但尽量不要使用多继承,否则会给代码带来不必要的麻烦
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 吃饭
    def eat(self):
        print('吃饭')

# 学生继承人类
class Student(Person):
    def __init__(self, name, age, score):
        # 子类调用父类的方法使用 super()
        super().__init__(name, age)
        self.score = score

    def eat(self):
        print('学生吃饭')

    def study(self):
        print('学生学习')
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季风泯灭的季节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值