python类和对象的概念_Python中的类与对象

一、定义

类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量。

类是抽象的,而对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。

同一个类可以生成无数个对象,对象 = 属性(特征) + 方法(行为)。如:

类是股票(概念),对象是某一只股票;

股票的属性:市值、成交量、价格;

股票的方法:获取股票市值、计算成交金额等。

在Python中,可以使用关键字class定义 Python 类,关键字后面紧跟类的名称、分号和类的实现。通常的命名方式类名用大写

属性为名词

方法为动词

class StockA:

price=20

volume=10000

def calAmount(self):

return self.price*self.volume

# 实例化类对象

checkStockA = StockA()

checkStockA.calAmount()self:类中的方法必须包含参数self,且self需为第一个参数。在调用方法时,我们无需明确提供与参数self相对应的参数。

class stock:

def getToday(self,stockName, price, volume):

self.stockName=stockName

self.price = price

self.volume = volume

def calAmount(self):

return {self.stockName+'_Amount': self.price*self.volume}

# 实例化类创建类对象

stockBABA = stock()

stockBABA.getToday('BABA', 180, 30000)

print(stockBABA.calAmount())

# {'BABA_Amount': 5400000}__init__(前后各两个下划线):在类实例化时会自动调用

class stock:

def __init__(self,stockName, price, volume):

self.stockName=stockName

self.price = price

self.volume = volume

def calAmount(self):

return {self.stockName+'_Amount': self.price*self.volume}

stockBABA = stock('BABA', 180, 30000)

print(stockBABA.calAmount())

二、公有和私有私有变量

在 Python 中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。私有变量一般不能被访问,但在Python中,可以通过_类名__变量名来访问,但建议不要这样做。

# 私有变量名

class stockBABA:

__name = 'BABA'

stockName = stockBABA()

stockName.__name

#'stockBABA' object has no attribute '__name'私有方法

class Site:

def __init__(self, name, url):

self.name = name # public

self.__url = url # private

def who(self):

print('name : ', self.name)

print('url : ', self.__url)

def __foo(self): # 私有方法

print('这是私有方法')

def foo(self): # 公共方法

print('这是公共方法')

self.__foo()

x = Site('baidu', 'www.baidu.com')

x.__foo()

# AttributeError: 'Site' object has no attribute '__foo'

三、类的继承

Python 同样支持类的继承,派生类的定义如下所示:

class DerivedClassName(BaseClassName):

statement-1

.

.

.

statement-N

BaseClassName(基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):

statement-1

.

.

.

statement-N

如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性。

class Stock:

def __init__(self,stockName, price, volume):

self.stockName=stockName

self.price = price

self.volume = volume

def calAmount(self):

return {self.stockName+'_Amount': self.price*self.volume}

class BABA(Stock):

pass

class TENCENT(Stock):

pass

class BIDU(Stock):

pass

class BuyMaxAmount(Stock):

def __init__(self):

self.haveCapital = True

def buy(self):

if self.haveCapital:

print('I have cash to buy stock')

self.haveCapital = False

else:

print("I don't have any cash now")

BuyMaxAmount('TENCETN', 350, 20000).calAmount()

# TypeError: __init__() takes 1 positional argument but 4 were given

解决方法:使用super()函数

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

class Stock:

def __init__(self,stockName, price, volume):

self.stockName=stockName

self.price = price

self.volume = volume

def calAmount(self):

return {self.stockName+'_Amount': self.price*self.volume}

class BABA(Stock):

pass

class BuyAmount(Stock):

def __init__(self, stockName, price, volume):

self.haveCapital = True

super().__init__(stockName, price, volume)

def buy(self):

if self.haveCapital:

print('I have cash to buy stocks')

self.haveCapital = False

else:

print("I don't have any cash now")

buyBABA = BuyAmount('BABA', 2500, 50000)

buyBABA.buy()

# I have cash to buy stocks

四、类的组合

class StockA:

def __init__(self,price):

self.price = price

class StockB:

def __init__(self, price):

self.price = price

class TwoStock:

def __init__(self, priceA, priceB):

self.stockA = StockA(priceA)

self.stockB = StockB(priceB)

def printStocks(self):

print('StockA $ %d , StockB $ %d '% (self.stockA.price, self.stockB.price))

twoStock = TwoStock(220, 350)

twoStock.printStocks()

# StockA $ 220 , StockB $ 350

五、相关内置函数issubclass(class, classinfo) 方法用于判断参数 class 是否是类型参数 classinfo 的子类。(一个类被认为是其自身的子类。)classinfo可以是类对象的元组,只要class是其中任何一个候选类的子类,则返回True。

isinstance(object, classinfo) 方法用于判断一个对象是否是一个已知的类型,类似type()。type()不会认为子类是一种父类类型,不考虑继承关系。

isinstance()会认为子类是一种父类类型,考虑继承关系。

如果第一个参数不是对象,则永远返回False。

如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。

hasattr(object, name)用于判断对象是否包含对应的属性。

getattr(object, name[, default])用于返回一个对象属性值。

setattr(object, name, value)对应函数 getattr(),用于设置属性值,该属性不一定是存在的。

delattr(object, name)用于删除属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一门面向对象的编程语言,类和对象是面向对象编程的核心概念。类是一种数据结构,它定义了一组属性和方法,这些属性和方法可以被对象调用。对象是类的一个实例,它是类的具体化,可以调用类定义的方法和属性。类和对象的关系就像是模具和模具生产出来的产品的关系,类是模具,对象是模具生产出来的产品。 在Python,我们可以通过定义类来创建对象。类定义了一组属性和方法,而对象则是这些属性和方法的实际运用。类可以看作是一种抽象数据类型,它定义了一些属性和方法,但是没有具体的值。而对象则是具有这些属性和方法的实例,是类的具体化。 在Python,通过class关键字来定义一个类,例如: ```python class Dog: def __init__(self, name, age): self.name = name self.age = age def bark(self): print("汪汪!") ``` 这个例子,我们定义了一个Dog类,这个类有两个属性:name和age,以及一个方法bark。在实际使用,我们可以通过创建Dog对象来使用这些属性和方法,例如: ```python my_dog = Dog("小黄", 2) print("我的狗狗名字叫做", my_dog.name, ",它今年", my_dog.age, "岁了。") my_dog.bark() ``` 这个例子,我们创建了一个名为my_dog的Dog对象,使用了它的name和age属性,并调用了它的bark方法。输出结果为: ``` 我的狗狗名字叫做 小黄 ,它今年 2 岁了。 汪汪! ``` 通过这个例子,我们可以看到类和对象的基本概念,以及它们在Python的使用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值